我有一个用户门户帐户。我在两个不同的标签中使用两个不同的用户名登录。
当我在同一个用户帐户的两个标签页中进行硬刷新(ctl+f5)
时,它会在两个标签页中打开。这可以是这两个用户名。我该怎么做才能解决这个问题?
答案 0 :(得分:2)
Session的机制使用COOKIE。 COOKIE在标签之间共享。
如果您通过两个不同用户使用一个浏览器会话登录,则可以禁用在cookie中存储会话ID:PHP session without cookies。
此外,您还可以使用浏览器功能。例如,FireFox的私密浏览。
答案 1 :(得分:1)
您无法使用两个不同的用户在同一浏览器上登录同一网站。最好使用两种不同的浏览器。
答案 2 :(得分:0)
一种选择是避免会话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生成的任何链接都是你自己必须做的。