注销后防止后退按钮

By simon at 2018-02-07 • 0人收藏 • 19人看过

我不希望用户通过点击返回按钮返回到受保护的页面 注销后。在我的注销代码中,我不喜欢t他会议和 重定向到登录页面。但是,我认为浏览器正在缓存页面 尽管会话可见从注销中被销毁。 我可以通过不允许浏览器缓存来避免这种情况 header("Cache-Control", "no-cache, no-store, must-revalidate") 但是这样我就失去了浏览器缓存的优点。 请提出一个更好的方法来实现这一点。我觉得,一定有办法 处理这个bŸJavaScript客户端

7 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

在PHP中实现而不是JavaScript。 在每个页面的顶部,检查用户是否登录。如果没有,他们 应该重定向到登录页面:

<?php 
      if(!isset($_SESSION['logged_in'])) : 
      header("Location: login.php");  
?>
正如你所提到的,在注销时,只需取消设置loggedin会话变量,然后 摧毁他会议:
<?php
      unset($_SESSION['logged_in']);  
      session_destroy();  
?>
如果用户现在单击,则不会有可用的logged
in会话变量, 和页面不会load。

2018-02-07   #2

您可以在每个受限制的页面上插入一个条件/函数,检查 适当的会话变量是否设置。这个方式,你可以打印2个版本 (一个用于有效用户,一个重定向到登录页面)

2018-02-07   #3

避免用户返回不是一个好的理由,最重要的是不安全 在所有。 如果你在每个之前测试用户的会话在“管理员”上做出的行动 网站,你应该没事,即使用户点击后退按钮,看到 缓存页面,并尝试如此mething。 由于会话不再,“关系事件”将返回错误 有效。 相反,你应该专注于拥有一个r真正安全的后台。

2018-02-07   #4

在PHP中实现而不是JavaScript。 在每个页面的顶部,检查用户是否登录。如果没有,他们 应该重定向到登录页面:

<?php 
      if(!isset($_SESSION['logged_in'])) : 
      header("Location: login.php");  
?>
正如你所提到的,在注销时,只需取消设置loggedin会话变量,然后 摧毁他会议:
<?php
      unset($_SESSION['logged_in']);  
      session_destroy();  
?>
如果用户现在单击,则不会有可用的logged
in会话变量, 和页面不会load。

2018-02-07   #5

我认为你唯一的服务器端选项是禁止缓存。这其实是 不是那么糟糕,如果你正在使用一个Javascript重的a应用程序作为您的主要HTML 可能只是一系列的JS调用,然后生成视图 飞。这样的散装of数据(JS MVC和核心代码)被缓存了,但是 实际的页面请求不是。 要添加到下面粘贴的意见,我会suggest增加一个小的AJAX调用 在加载期间甚至会触发到后端的缓存页面 并检查会话。如果没有找到会话,它会重定向用户 远。这是客户端代码,并不是一个安全的修复,当然,但看起来更好。 你可以从你的良知中得到这个

一个便宜的修复,如果一切都失败了将是一个“请关闭此窗口 安全理由“在注销页面上的消息。 - izb 5月9日在8:36 但是像N.说过 你不必禁用任何东西。如果你们回去吧,他们服侍了 受限制页面的缓存版本。如果他们试图点击它,什么都没有 将工作,因为吨他适当的会议将不会被设置。 - N.B. 5月9日在 7:50

2018-02-07   #6

这是一个简单而快速的解决方案。 到登录表单标签添加target="_blank"显示不同的内容 窗口。然后,注销只需关闭该窗口和后退按钮的问题 (Safari浏览器)解决了。 即使试图使用的历史将没有t显示页面,而是重定向 登录页面。对于Safari浏览器而言,这很好,但是对于Firefox等其他浏览器来说, session_destroy();照顾它。

2018-02-07   #7

您需要登录的页面,每1000毫秒使用setInterval 并检查用户是否登录或不使用aj斧头。如果用户会话是 无效,重定向他登录页面。

登录后方可回帖

Loading...