我有一个用户门户帐户。我在两个不同的选项卡中使用两个不同的用户名登录它。
当我(ctl+f5)
在同一用户帐户的两个选项卡中进行硬刷新时,它会在两个选项卡中打开。这可以是这两个中的任何用户名。我能做些什么来解决这个问题?
我有一个用户门户帐户。我在两个不同的选项卡中使用两个不同的用户名登录它。
当我(ctl+f5)
在同一用户帐户的两个选项卡中进行硬刷新时,它会在两个选项卡中打开。这可以是这两个中的任何用户名。我能做些什么来解决这个问题?
Session's mechanism uses COOKIEs. COOKIEs are shared between tabs.
If you what to login with one browser session by two differnet users you can disable storing session id in cookie: PHP session without cookies.
Also you can use feature of browsers. FireFox's Private browsing for example.
您无法使用两个不同的用户在同一浏览器上登录同一网站。最好使用两种不同的浏览器。
一种选择是避免会话 cookie。将 PHPSESSID 变量添加到查询字符串中,或者将其放在路径中并使用 URL 重写或 PATH_INFO 将/x/y.php/925235a...
等转换为/x/y.php?PHPSESSID=925235a...
. 你实际上可以告诉 PHP 为你做第一个。
请注意,为了使其正常工作,您需要说类似
ini_set('session.use_cookies', false);
或类似的,在您的脚本中调用session_start()
. 那么 PHP 将不会发送会话 cookie;在大多数情况下,它只会透明地重写您页面中的 URL 以包含会话 ID,因此您可以免费获得第一个选项。
这种方法的最大缺点是它使您的用户容易受到称为“会话固定”的攻击。如果我给您一个已经有会话 ID 的 URL,然后您单击它并登录到该站点,那么您已经为我登录了我的会话,我现在可以像您一样访问该站点。解决此问题的一种方法是在有人登录时切换到新会话……但如果您的应用是购物车,那么让人们登录购买东西可能会很烦人。
第二大:如果用户点击没有会话 ID 的链接,PHP 将无法识别他们。(用户可以使用“返回”按钮返回到他们拥有会话 ID 的位置,但这在可用性方面很糟糕。)您必须确保会话 ID 出现在每个链接或 URL 中。幸运的是,PHP 会为您重写其中的大部分,但是您使用 JS 等生成的任何链接都必须自己完成。