如果您有一个非常复杂的数据库,如何有效地管理会话

时间:2013-04-12 05:25:24

标签: php javascript jquery

我有一个用户门户帐户。我在两个不同的标签中使用两个不同的用户名登录。

当我在同一个用户帐户的两个标签页中进行硬刷新(ctl+f5)时,它会在两个标签页中打开。这可以是这两个用户名。我该怎么做才能解决这个问题?

3 个答案:

答案 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生成的任何链接都是你自己必须做的。