我试图在30分钟后破坏当前的用户会话。它工作正常。 问题是
1)当其他用户在新标签页中打开网页链接时,他们设法访问该页面而不进行tru登录过程。
我试过按照本教程
http://www.homeandlearn.co.uk/php/php14p3.html
<?PHP
session_start();
if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) {
header ("Location: login.php");
}
?>
但它不起作用。因为旧会议尚未被销毁(不到30分钟)..
我该怎么办?
答案 0 :(得分:2)
通常,用户的登录会话存储在每个网站的单个cookie中,该cookie在单个浏览器的所有窗口和选项卡中共享。清除浏览器中的cookie需要您再次登录,因为当您下次访问远程网站(您的PHP站点)时,您将不再使用旧的会话ID传递cookie。
当两个人使用相同的浏览器时,这会给您带来问题,因为您网站的Cookie对两个人来说都是相同的。
您可以选择在PHP站点上提供手动“注销”按钮,该按钮会在30分钟超时发生之前销毁会话。但是,无法保证用户在完成后单击此按钮。
来自session id passing上的PHP文档:
传播会话ID有两种方法:
Cookies
网址参数
会话模块支持这两种方法。 Cookie是最佳选择,但是 因为它们并非总是可用,我们也提供了替代方案 办法。第二种方法将会话ID直接嵌入到URL中。
这表明在启用运行时选项session.use_trans_sid
的情况下还有另一个选项,会话ID嵌入在每个URL中,而不是存储在cookie中。有了这个,您将得到以下网址末尾的mysession=123
值:www.example.com/home.php?mysession=123
因此,如果用户1访问www.example.com并执行登录,则只要其会话处于活动状态,每个链接的末尾都会有mysession=123
。
然后,用户2在新选项卡中浏览到www.example.com,并要求他们再次登录,因为他们输入的网址中没有mysession=###
值。登录此选项卡后,每个链接会像www.example.com/home.php?mysession=345
警告:大多数网站都倾向于使用Cookie,因为您可以在本文中看到PHP文档中的use-trans-sid setting。
与之相比,基于URL的会话管理具有额外的安全风险 基于cookie的会话管理。用户可以发送包含的URL 通过电子邮件或用户向其朋友发送活动会话ID可以保存URL 包含其书签的会话ID并访问您的网站 例如,总是使用相同的会话ID。