我正在修改 php-login.net 的登录脚本,并试图使其更加安全。这个特定的登录脚本有一个登录类,当用户登录时设置了cookie和session变量。
不幸的是,用户访问的页面上没有检查确保用户登录了。如果一个人直接输入URL,他们不需要登录就能进入该页面。
我想知道验证用户是否已登录的最佳方法。目前,我正在使用这个方法,但我不知道它是否冗余(意思是:cookie变量总是等于session变量,所以检查两者是否都有意义吗?)任何意见都会有所帮助。
/**
* write user data into PHP SESSION [a file on your server]
*/
$_SESSION['user_name'] = $result_row->user_name;
$_SESSION['user_email'] = $result_row->user_email;
$_SESSION['user_logged_in'] = 1;
/**
* write user data into COOKIE [a file in user's browser]
*/
setcookie("user_name", $result_row->user_name, time() + (3600*24*100));
setcookie("user_email", $result_row->user_email, time() + (3600*24*100));
$this->user_is_logged_in = true;
不幸的是,用户访问的页面上没有检查确保用户登录了。如果一个人直接输入URL,他们不需要登录就能进入该页面。
我想知道验证用户是否已登录的最佳方法。目前,我正在使用这个方法,但我不知道它是否冗余(意思是:cookie变量总是等于session变量,所以检查两者是否都有意义吗?)任何意见都会有所帮助。
session_start();
if(!(isset($_COOKIE['user_email']) &&
isset($_SESSION['user_email']) &&
($_COOKIE['user_email']===$_SESSION['user_email']) &&
isset($_COOKIE['user_name']) &&
isset($_SESSION['user_name']) &&
($_COOKIE['user_name']===$_SESSION['user_name']) &&
isset($login) &&
$login->isUserLoggedIn())){
header("location:../../index.php");
exit;
}
对不起,代码格式可能有些混乱,我还在努力弄清楚这个网站的文本格式细节。