我正在编写一个用户系统,用户将使用 Twitter 的 API 登录,然后我会将信息以及我让用户输入的一些额外内容存储在数据库中。我希望用户能够回来登录后无需再次登录。我决定获取有关用户的所有相关信息,将其保存到数据库中,然后将会话 ID 和用户 ID 保存到另一个表中。最后,我会在用户的计算机上设置一个包含相同会话 ID 的 cookie,以便他们在整个浏览过程中保持登录状态。然后,如果他们关闭浏览器并稍后重新访问该网站,我会读取该 cookie,并进行比较使用会话表,获取用户 ID,并重建会话(使用新的会话 ID 更新会话表)。
我的问题是,会话 ID 的随机性如何?用户是否有可能获得与一周内未访问该网站的用户分配给他们的会话 ID(因此 cookie 仍处于活动状态)相同的会话 ID?如果发生这种情况,服务器可能会将新用户误认为是旧用户。我真的很想避免使用 IP 地址,因为人们可能通过移动浏览器访问该网站,而 IP 可能随时更改。
对此有什么想法吗?我只是想确保用户 A 和用户 B,无论相隔多少时间,都不会获得相同的会话 ID。
将当前时间(以微秒为单位)附加到唯一 ID...
session_id() + microtime();
Run Code Online (Sandbox Code Playgroud)
因此,不仅 session_ids 必须相同,而且它必须在同一微秒内发生......使得几乎不可能的事情变得不可能。保证 100% 的唯一方法是对照所有现有会话 ID 检查此随机值,如果已存在则重新滚动它。