在我的PHP网站上,用户可以登录并可以选中“记住我”来设置cookie。PHP登录会话和cookie
我该如何储存SESSION
变量?用户名,散列密码和user ID
,或只有user ID
?如果我只存储user ID
,那么是否有人可以编辑SESSION
并更改ID?
那么COOKIE
呢?我应该只储存user ID
吗?据我所知,cookies可以由最终用户修改...
在我的PHP网站上,用户可以登录并可以选中“记住我”来设置cookie。PHP登录会话和cookie
我该如何储存SESSION
变量?用户名,散列密码和user ID
,或只有user ID
?如果我只存储user ID
,那么是否有人可以编辑SESSION
并更改ID?
那么COOKIE
呢?我应该只储存user ID
吗?据我所知,cookies可以由最终用户修改...
看起来你对会话和cookies没有清晰的认识!
没有人可以改变会议内容,除了你的代码(在攻击旁边)。因此,您可以存储需要频繁访问的所有内容(合理的),例如user id
或username
。在Cookie中,您必须存储一些模糊的信息,以便稍后他/她尝试访问您的页面时可以识别该用户。所以根据cookie内容可以重新生成用户会话(即自动重新登录用户)。只是要注意用户可以更改Cookie内容,因此出于安全原因不能像user id
那样简单。
我只是给你一个简单的例子,它远非完美,但并不那么糟糕!您可能需要定制它适合您的方案:
在这里你可以创建cookie的内容是这样的:
$salt = substr (md5($password), 0, 2);
$cookie = base64_encode ("$username:" . md5 ($password, $salt));
setcookie ('my-secret-cookie', $cookie);
// and later to re-login user you do:
$cookie = $_COOKIE['my-secret-cookie'];
$content = base64_decode ($cookie);
list($username, $hashed_password) = explode (':', $hash);
// here you need to fetch real password from database based on username. ($password)
if (md5($password, substr(md5($password), 0, 2)) == $hashed_password) {
// you can consider use as logged in
// do whatever you want :)
}
UPDATE:
我写this article覆盖这个概念。希望能帮助到你。
您应该将随机会话值存储在cookie中。你绝对不应该在cookie中存储关于用户的任何信息。然后,您可以检查每个页面加载的Cookie中的会话ID,以确保(a)用户应该有权访问该内容,并且(b)会话ID有效。
在PHP中,您可以使用session_set_cookie_params
和session_name
来设置Cookie的参数。
用户不能编辑会话变量,它们在服务器上进行管理。
会话变量优势
1)安全
2.)鲁棒
会话缺点 1。)寿命短的时间,直到会话中,
会议被摧毁
当用户关闭他的浏览器 服务器重启
会话中使用session_destroy销毁();
所以会更安全
饼干,另一方面让你记住用户prefrences
如果使用两者的结合,那么它的优势,你的代码
You can store userid and username in cookie, then verify user identity using its combination.
如果它不是退出然后您可以登录用户并保持会话中的信息以及更新cookie。
感谢您的澄清;你能否给出使用cookies重新登录用户的最佳做法?我无法弄清楚我将如何继续...... –
检查更新!该代码即时写入!所以如果你看到错字或错误,我很抱歉,尝试修复它或告诉我的问题 – Boynux
谢谢,这似乎是一个好方法。你对此有何看法:http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/?对我来说似乎很好。但它过时了吗? –