Зарегистрированный сеанс идет на все URL

У меня два пользователя me & bai,

Если me логины идут HTTP: // локальный / Электронные книги / новый / меня

И если bai логины идут HTTP: // локальный / Электронные книги / новый / баи

Я использую сессии, так что никто не идет их соответствующие ссылки без login,

Но я сталкиваюсь с проблемой, что если bai вошел в систему, и пользователь вводит http://localhost/Ebooks/new/me в строке URL она переходит в эту папку, но она не должна входить в систему, если пользователь вошел в систему.

Код идет здесь: —

HTTP: // локальный / Электронные книги / новый /index.php

<?php
session_start();
require_once 'class.user.php';
$user_login = new USER();

if($user_login->is_logged_in()!="")
{
$user_login->redirect($logout);
}

if(isset($_POST['btn-login']))
{
$uname = trim($_POST['txtuname']);
$upass = trim($_POST['txtupass']);

if($user_login->login($uname,$upass))
{
$user_login->redirect($uname);
}
}
?>

HTTP: // локальный / Электронные книги / новый /class.user.php

public function login($uname,$upass)
{
try
{
$stmt = $this->conn->prepare("SELECT * FROM tbl_users WHERE userName=:username");
$stmt->execute(array(":username"=>$uname));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);

if($stmt->rowCount() == 1)
{
if($userRow['userStatus']=="Y")
{
if($userRow['userPass']==md5($upass))
{
$_SESSION['userSession'] = $userRow['userID'];
return true;
}
else
{
header("Location: index.php?error");
exit;
}
}
else
{
header("Location: index.php?inactive");
exit;
}
}
else
{
header("Location: index.php?error");
exit;
}
}
catch(PDOException $ex)
{
echo $ex->getMessage();
}
}public function is_logged_in()
{
if(isset($_SESSION['userSession']))
{
return true;
}
}

public function redirect($url)
{
header("Location: $url");
}

public function logout()
{
session_destroy();
$_SESSION['userSession'] = false;
}

Http: //localhost/Ebooks/new/bai/index.php & Http: //localhost/Ebooks/new/me.php как есть :-

<?php require_once '../home.php' ?>

Http: //localhost/Ebooks/new/home.php

<?php
session_start();
require_once 'class.user.php';
$user_home = new USER();

if(!$user_home->is_logged_in())
{
$user_home->redirect($web);
}

$stmt = $user_home->runQuery("SELECT * FROM tbl_users WHERE userID=:uid");
$stmt->execute(array(":uid"=>$_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

?>

Пожалуйста, помогите мне, как это убрать!

1

Решение

Вот решение:

хранить имя пользователя также в сеансе. Так что в логине

 $_SESSION['userSession'] = $userRow['userID'];
$_SESSION['user_name'] = $userRow['userName'];

Затем в home.php проверьте имя пользователя с путем

 if($_SERVER['REQUEST_URI'] != $_SESSION['user_name'])
{
//show error or redirect to user page
}
else
{
//continue your code

}

РЕДАКТИРОВАТЬ попробуйте отредактированный код для проверки URL (в home.php)

$url =  $_SERVER['REQUEST_URI'];

$exp = explode("/",$url);
$match_name= "";
if(isset($exp[count($exp)-2]) && $exp[count($exp)-2] != "")
{
$match_name= $exp[count($exp)-2];
}
elseif(isset($exp[count($exp)-1]) && $exp[count($exp)-1] != "")
{
$match_name= $exp[count($exp)-1];
}
if($match_name != $_SESSION['user_name'])
{
//show error or redirect to user page
}
else
{
//continue your code

}
1

Другие решения

Очень просто, сравните запрошенный каталог с именем пользователя и посмотрите, совпадают ли они, если они есть, покажите его, в противном случае покажите им сообщение об ошибке.

<?php
$exists = strrpos($url, '/');
$requested_username = $exists === false ? false : substr($url, $exists + 1);

if ($requested_username == $_SESSION['username_here']) {
/** Pass... **/
} else {
/**  Fail... **/
}
?>

Вы бы заменить $url с запрошенным URL.

Живой пример

Repl

0

Вам нужно проверить сессию на странице «я», если пользователь авторизован, то перейти на другую, перенаправить его на страницу «бай». И то же самое для другого типа пользователя.

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector