我想知道如果用户手动刷新页面,或者单击后退按钮而不是单击提供的菜单,某些应用程序会如何注销用户。我在印度的许多银行应用程序中看到了这种情况。 在思考之后,我想到的一个解决方案是每个登录用户我可以存储当前会话ID和下一个会话ID并在url中传递会话ID。所以现在如果用户刷新页面并且会话ID不是下一个会话ID,那么我们可以简单地将它们注销掉。所以我能做的是,如果在网址中找到下一个会话ID,那么我可以手动设置当前会话ID。
但是从编程的角度来看,这可能是忙乱的,因为我必须在呈现页面的每个URL中设置下一个会话ID,我担心它是否是安全威胁?
有没有想过这个?
答案 0 :(得分:0)
基本上是的,这就是你要做的事情。出于安全考虑,您不应该在URL中传输会话ID,而是将其保留在cookie中。但是,您可以在用户的会话中保存随机令牌:
$_SESSION['token'] = uniqid(null, true); // quick prototype, not the best method
然后,您将此令牌嵌入页面上的每个网址:
<a href="someMenuItem.php?token=<?php echo $_SESSION['token']; ?>">
然后在每个页面加载时,检查令牌是否相同。如果是,则生成新的随机令牌;否则你会破坏用户的会话。
说完这一切......
这是非常不友好的用户。刷新页面或后退是Web上的常规交互范例。有时这是必要的事情,例如如果网络连接错误且只加载了一半页面,则需要重新加载。如果您实施此类限制,则会主动使您的页面无法使用。这可能提供的任何安全性好处都可以通过其他方式获得,没有必要这样做。请参阅PHP Session Fixation / Hijacking。