避免用户使用旧会话/其他用户会话访问网页

时间:2012-05-16 02:20:56

标签: session login

我试图在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分钟)..

我该怎么办?

1 个答案:

答案 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

那样为mysession带来新的价值

警告:大多数网站都倾向于使用Cookie,因为您可以在本文中看到PHP文档中的use-trans-sid setting

  

与之相比,基于URL的会话管理具有额外的安全风险   基于cookie的会话管理。用户可以发送包含的URL   通过电子邮件或用户向其朋友发送活动会话ID可以保存URL   包含其书签的会话ID并访问您的网站   例如,总是使用相同的会话ID。