我对如何处理会话抱有一些疑问。
现在,我有一个MySQL数据库,其中“users”表有一个session_id字段。如果为NULL,则用户未登录?如果该值与PHPSESSID cookie的值相同,则表示用户已登录。
我不知道为什么,但我不知何故觉得这不足以确定我正在处理哪个用户。有什么我想念的,或者我的恐惧没有根据?
答案 0 :(得分:2)
就我所见,你所描述的内容并没有什么本质上的错误。
当然,您的登录和注销机制需要在登录或注销时可靠地添加和删除用户ID。 (仅在密码匹配时插入用户名等)。此外,需要可靠地删除过期的会话。如果给出,那应该没问题。
答案 1 :(得分:2)
只是对Pekka所说的扩展,你还可以在你的表中包含一个'最后一次'字段并将其用作判断因为正如Pekka提到过期会话一样,你的数据库不会被告知它们已经消失了。所以你将被迫做出一些东西,所以它手动检查用户最后一次在那里或那些线上的东西,然后将其映射回会话超时(我相信默认情况下为15-30分钟)和然后在这段时间之后,清除在最后X分钟内没有活动的任何用户。
答案 2 :(得分:1)
考虑上述选项 - 在用户表中跟踪用户只允许每个用户1个会话。我建议将数据存储在名为sessions的表中,并包含以下列:
sess_id | sess_userid | sess_ipv4 | sess_lastseen(datetime / timestamp)| sess_sessionid(varchar)
我认为这将允许用户进行多次登录,但具有不同的会话ID,即使他们共享相同的公共IP,允许笔记本电脑,平板电脑,手机等 - 这样您就可以单独跟踪每个设备与单个用户
希望这有帮助!
上周发表的另一篇文章建议有一个盛行和节目,并确保你正在为正确的用户分配一个新的会话(每15分钟?)。 。将会话从旧的交换到新的并将prev会话存储为支票 - 不确定这是否会有所帮助,但是我认为id会提到它。