【发布时间】:2011-08-23 23:02:50
【问题描述】:
作为我正在进行的一个更大项目的一部分,我们希望在用户登录过程中集成“记住我”功能。主要开发人员的一个建议是将他们的 PHP session_id() 简单地存储在 cookie 中,并存储在数据库中的记录中。当他们下次访问该站点时,从 cookie 中查找 session_id 并检索他们的凭据。
这对于基于一台计算机的用户来说非常有用,但与云计算(它是一个网络应用程序)的粒度相悖,用户可能会从不同的计算机访问该站点,并且可能希望选择记住他的详细信息商场。例如,在一台机器上设置他们的 session_id,然后在另一台机器上重新设置它意味着他们将从第一台机器上注销。
我倾向于向团队建议我们创建一个单独的数据库表,其结构如下:
+----------------+----------------+------------------+--------------------+
| user_id | session_id | ip_address | initial_login_date |
+----------------+----------------+------------------+--------------------+
| 5 | 123456789101 | 192.168.0.1 | 1305194639 |
+----------------+----------------+------------------+--------------------+
| 5 | 021456789101 | 255.255.255.255 | 1305194639 |
+----------------+----------------+------------------+--------------------+
然后我们需要做的就是在表中查找他们的 session_id,并获取 user_id。
有没有更好的方法来实现这一点?
【问题讨论】:
-
由于代理、AOL、黑帽之类的东西,使用 IP 地址来识别用户是个坏主意。我对最佳实践的样子很感兴趣。
-
对不起,我应该更清楚。我们没有使用 IP 地址来识别用户 - 这就是 session_id 字段存在的原因。 IP 地址用于某些内部管理系统 - 不是实际的登录功能或用户标识。