2011-12-20 142 views
2

我正在试图建立一个安全的PHP登录系统,但遇到了一些我不确定如何处理的过程。检查用户是否登录

用户登录后,检查他们在后续页面上登录的最佳方法是什么?目前我正在设置会话变量,但是我应该使用另一种方法吗?我应该每次登录时都生成一个唯一的ID,如果有的话,我会如何使用它?将数据库&中的副本作为Cookie存储并在每个页面加载比较它们?或者你们可以想到的其他方法。

谢谢大家提前。

+1

只需在会话中存储他们的用户ID就足够了。 $ _SESSION ['uid']然后检查是否(!empty($ _ SESSION ['uid])更多涉及的方法是将整个用户对象存储在会话中,对象必须是可序列化的 – 2011-12-20 16:09:12

+0

@DmitriSnytkine,我可以取该会话ID,在另一台计算机上使用它来代替密码,这听起来不太安全,另外,如果你想要许多网站实现的“记住我”功能,就应该考虑使用Cookie(例如,请参阅[保留我的签名In](https://login.yahoo.com/config/login_verify)on Yahoo。) – FakeRainBrigand 2011-12-20 16:13:03

+0

@FakeRainBrigand在共享主机中,一个好的做法是将您的会话(和其他敏感数据)存储在您的数据库中。 – macjohn 2011-12-20 16:20:19

回答

1

我总是使用会话方法,但是如果您想要非常安全(防止会话劫持),您可以将当前IP和用户的其他特征与会话ID一起保存在数据库的MD5哈希中。然后,在登录后打开页面时,您可以使用客户端属性重新生成MD5哈希,并使用数据库中的会话ID检查该哈希。通过这种方式,劫持会话将会更加困难,甚至是不可能的。当然,'mysql会话'必须被删除,或者不能重复使用,因为用户可能会更换计算机等,但它会阻止劫持活动会话。

+0

理论上一个坚实的计划,但我会尽量远离cookie,如果我浏览您的网站无痕/匿名模式,您的整个系统将失败。只在数据库和总是可用的信息,可以出错的信息少。 – 2011-12-20 16:59:25

+0

会话ID已经是一个唯一的ID并在用户的计算机上作为cookie存储。基本上php的会话完全按照你的建议进行,除了它不将它存储在数据库中,但是你可以编写你自己的会话处理器类来存储数据库中的会话。 – 2011-12-20 16:59:54

+0

不完全是这样,因为会话可能被劫持,并且只要劫持者在他的电脑上没有cookie,它就无法工作。但我以前的评论仍然存在。 – 2011-12-20 17:01:30