У меня два пользователя 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);
?>
Пожалуйста, помогите мне, как это убрать!
Вот решение:
хранить имя пользователя также в сеансе. Так что в логине
$_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
}
Очень просто, сравните запрошенный каталог с именем пользователя и посмотрите, совпадают ли они, если они есть, покажите его, в противном случае покажите им сообщение об ошибке.
<?php
$exists = strrpos($url, '/');
$requested_username = $exists === false ? false : substr($url, $exists + 1);
if ($requested_username == $_SESSION['username_here']) {
/** Pass... **/
} else {
/** Fail... **/
}
?>
Вы бы заменить $url
с запрошенным URL.
Живой пример
Вам нужно проверить сессию на странице «я», если пользователь авторизован, то перейти на другую, перенаправить его на страницу «бай». И то же самое для другого типа пользователя.