lui*_*bal 18 php cookies session login
我正在开发一个基于PHP的登录系统.每个用户都有一个ID(一个数字)和一个密码,它被存储为盐渍哈希.
我能够确定登录是否成功,但现在我需要在某处存储该信息(以便用户不会永久注销).
在过去,我玩过$ _SESSION变量.但是,这些似乎在用户离开浏览器时被删除,这是不希望的.此外,我不能"假设"用户不会试图欺骗系统,因此它必须是安全的.
所以,这是我的问题:
$_SESSION或$_COOKIE?每种方法的主要优点是什么?请注意,在此特定问题中没有考虑数据库安全问题.
关于3号,我的意思是:
我想让我的网站尽可能安全但高效且用户友好.如果采用基于SessionID的方法,我也会对如何将其存储在数据库中的一些解释表示赞赏.
先感谢您
编辑:伊兰和布莱恩的答案似乎是我需要的.不幸的是,我只能将其中一个标记为已接受.我会尝试继续实施,看看哪一个更有用.
我想重申Eran的观点永远不会在会话或cookie数据中存储用户密码甚至密码的哈希值.
总的来说,我已经使用Cookie在Web应用程序中实现了记住我的功能.关于构建"安全"持久登录系统的信息的一个好地方是这篇关于鱼缸的博客文章.另一个Stack Overflow答案已经涵盖了一个深入的答案.
如果您需要确保登录安全,则必须使用https.这是因为如果cookie或会话未加密,则可能会被盗.
另一个好的做法是2级登录系统.您可以在亚马逊等网站上看到此信息,您可以在不登录的情况下将内容添加到购物车中,但如果您想以某种方式结帐或修改帐户,则必须再次输入密码.
对于敏感信息(即身份验证结果),仅使用会话.会话存储在服务器端,不太可能被泄露.
关于会话生存期,默认值是浏览器会话的生命周期 - 但您可以控制它.有几个设置会影响:
session.gc_maxlifetime - 有效控制会话的生命周期.
session.gc_probability和session.gc_divisor一起确定会话垃圾收集的发生频率.
最后 - session.cookie_lifetime控制会话cookie的生命周期(保存会话ID的cookie,因此不必通过URL进行记录).它应该与session.gc_maxlifetime的值匹配.
此外,永远不要在会话或cookie中存储密码(即使是散列格式).只是验证的结果.