用例:
网站的某些区域仅限成员(member)使用,如果用户已登录则显示页面,否则重定向至登录/注册表格。
我的逻辑
我在 Users()
类中创建了一个方法,它只检查是否设置了 $_SESSION['userID']
。
逻辑是,如果 $_SESSION[]
未设置,则用户未登录,因为 $_SESSION['userID']
变量设置为登录。我想出了以下...
方法
public static function isLogged(){
if(!isset($_SESSION['userID'])){
header(':Location: login.php');
die();
}
}
考虑到以上,我只是在页面的开头添加了isLogged()
方法,如果$_SESSION('userID')
超全局不是设置用户被重定向。
我的问题/问题
上面的问题是我无法安心休息,因为:
- 该方法似乎效率低下...即是否有更好(更有效的方法)?
- 我不确定未经授权的用户是否可以执行任何变通方法来查看该页面
- 我可能在
isLogged()
方法中遗漏了一些关键信息?
附加信息
登录方式
public function login_user($newEmail, $newPword)
{
global $db;
$this->email = $newEmail;
$this->password = $newPword;
$sql = "SELECT * FROM bru_users WHERE email = :email AND password = :pword";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':email', $newEmail);
$stmnt->bindValue(':pword', $newPword);
$stmnt->execute();
$is_registered = $stmnt->rowCount();
if ($is_registered > 0) {
$users = $stmnt->fetchAll();
foreach ($users as $user) {
$userInfo[] = array('userID' => $user['userID'], 'email' => $user['email'], 'userName' =>$user['userName'], 'firstname' => $user['firstname'],
'lastname' => $user['lastname'], 'reg_date' => $user['registration_date']);
}
if(isset($userInfo)){
foreach ($userInfo as $start) {
$_SESSION['userID'] = $start['userID'];
$_SESSION['email'] = $start['email'];
$_SESSION['userName'] =$start['userName'];
$_SESSION['firstname'] = $start['firstname'];
$_SESSION['lastname'] = $start['lastname'];
}
}
} else {
return false;
}
return true;
}
如果更有经验的编码人员可以快速浏览一下,将不胜感激。非常感谢
最佳答案
- The method seems inefficient...i.e there is a better (more efficient way of doing this)?
不, session 变量相当有效。这是执行此操作的常规方法。
- Im unsure whether there are any work arounds that unauthorized users can perform to view the page
只有当他们可以劫持授权用户的 session 时。但就用户身份验证而言,几乎所有的赌注都落空了。劫持 session 需要他们获取其他用户的 cookie。如果您使用 SSL 加密您的连接,您将尽可能安全。
- I'm perhaps missing some critical info inside the isLogged() method?
不,仅此而已。
关于PHP检查用户是否可以访问页面的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48222663/