【发布时间】:2012-10-29 01:05:12
【问题描述】:
我正在修改来自 php-login.net 的登录脚本并试图使其更安全。这个特定的登录脚本有一个登录类,它在用户登录时设置 cookie 和会话变量。
/**
* 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_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;
}
(抱歉,代码格式不正确,我仍在尝试找出本网站上文本格式的细微差别)
【问题讨论】:
-
哇。从头开始。
-
伟大的斯科特!我同意@Relentless。但是,如果需要继续使用预先存在的代码,我建议只检查 Session。废弃 cookie。
-
是的,cookie是多余的,客户端已经有一个cookie指向服务器端会话变量。
-
第二。放弃 cookie 并专注于更好的会话管理/课程。
-
听起来不错,扔饼干。谢谢您的帮助。 @PenguinCoder/@relentless,不幸的是,从头开始不是这个选项。抱怨,抱怨。
标签: php session cookies session-variables