2

尽管它可能不会经常发生,但可能会发生 UserA 已登录并具有活动会话的情况。然后 UserB 拿起笔记本电脑并想使用同一个站点。在 PHP 中是否可以对此进行测试并允许此操作,或者每个会话一个用户。

我遇到的示例是在测试时我让 userA 登录到他们的个人资料,然后对于 userB,我单击了一个链接来重置他们的密码,但是我没有点击密码重置页面,而是被重定向到 userA 的个人资料页面。这是我编码的方式,但我想知道这些天与家人一起在笔记本电脑上为每个人使用我是否应该设计一种方法让每个人都有自己的会话来处理电子邮件链接等案例?

编辑:我决定完全放弃这个想法。我将把它留给用户来保护他们的会话。

4

2 回答 2

6

我只是发布这个来展示它是如何成为可能的,但我强烈建议你永远不要尝试使用这种技术。它打开了整个安全问题的世界,您可以为用户提供的任何小便利都将被它引起的问题完全摧毁。

话虽如此,您可以使用 PHP trans_sid(“透明会话 ID”)支持,其中会话 ID 自动嵌入到 URL 中并作为隐藏的表单字段。这将允许您打开多个窗口,每个窗口都有自己的会话,窗口之间没有共享。

基本上,您将关闭基于 cookie 的会话并仅使用透明 ID:PHP 将自动修改<a href="...">以将会话 ID 参数添加到查询字符串中,并根据需要插入隐藏的表单字段。它不适用于 JS 代码等,但您可以在那里自己添加 ID。

但是,问题出在:既然会话 ID 嵌入在 URL 和表单中,为您网站上的页面添加书签会将书签与当时正在使用的特定会话联系起来。剪切和粘贴 URL 以共享某些内容也会将用户的会话传输给他们将链接发送给的任何人。从您的站点单击任何指向外部世界的链接都会将会话 ID 作为引用者的一部分传输。例如,您刚刚使会话劫持变得微不足道,因为用户每次做任何事情时都会在屋顶上大喊他们的会话 ID。


更简单的解决方案:使用浏览器的“色情模式”,这样每个窗口都有自己的 cookie 存储,将每个用户的窗口/会话与其他窗口/会话分开。

于 2012-12-03T19:22:33.173 回答
0

到目前为止,我担心 chrome 和 firefox 是可能的(我不使用其他浏览器)。这种功能称为“多会话”。

在 chrome 中,可以通过进入 chrome://chrome/settings/ 并将用户添加到 chrome 来激活它。

关于 com:

您的服务器如何知道谁在物理上使用笔记本电脑?传统的(明智的)手段实际上是不可能的

服务器只是问你一个 id 来获取你的会话。从技术上讲,这个 id 存储在一个 cookie 中,所以它链接到物理机

于 2012-12-03T19:20:45.057 回答