通常,用户的登录会话存储在每个网站的单个 cookie 中,该 cookie 在单个浏览器的所有窗口和选项卡中共享。清除浏览器中的 cookie 将需要您再次登录,因为当您下次访问远程网站(您的 PHP 站点)时,您将不再使用旧会话 id 传递 cookie。
当两个人使用相同的浏览器时,这会给您带来问题,因为您网站的 cookie 对两个人来说都是相同的。
您的一个选择是在您的 PHP 站点上提供一个手动“注销”按钮,这将在 30 分钟超时发生之前破坏会话。但是,不能保证用户在完成后会单击此按钮。
来自会话 id 传递的 PHP 文档:
传播会话 id 有两种方法:
session 模块支持这两种方法。Cookie 是最佳选择,但由于它们并不总是可用,我们还提供了另一种方式。第二种方法将会话 ID 直接嵌入到 URL 中。
这表明还有另一个选项可供您启用运行时选项session.use_trans_sid
,并且会话 ID 嵌入在每个 url 中,而不是存储在 cookie 中。有了这个,你会得到类似于mysession=123
以下网址末尾的值:www.example.com/home.php?mysession=123
因此,如果用户 1 访问 www.example.com 并执行登录mysession=123
,那么只要他们的会话处于活动状态,每个链接都会在其末尾出现。
然后用户 2 在新选项卡中浏览到 www.example.com 并要求他们再次登录,因为mysession=###
他们输入的 url 中没有值。在此选项卡上登录后,每个链接都会有一个新的 mysession 值,例如www.example.com/home.php?mysession=345
警告:大多数网站更喜欢使用 cookie 是有原因的,您可以在这篇关于PHP 文档中的use-trans-sid 设置的说明中看到。
与基于 cookie 的会话管理相比,基于 URL 的会话管理具有额外的安全风险。例如,用户可以通过电子邮件将包含活动会话 ID 的 URL 发送给他们的朋友,或者用户可以将包含会话 ID 的 URL 保存到他们的书签并始终使用相同的会话 ID 访问您的站点。