【问题标题】:How can manage php session after successful logout?成功注销后如何管理php会话?
【发布时间】:2012-07-09 21:32:05
【问题描述】:

在我的应用程序中有三个网页。 1.) 登录页面。 2.) 欢迎页面 3.) 登出页面

我已经使用 PHP 会话对象管理会话。 在我的应用程序中,登录和注销功能工作正常。

这里的问题是:当用户从logout.php页面点击浏览器后退按钮成功注销后,他再次到达welcome.php页面而他成功注销。但是我希望那里的页面已经过期或者不应该回到welcome.php页面。

提前致谢。

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    这实际上有点棘手,但(据我所知)这与缓存有关。

    我设法通过 PHP 添加一些标头来避免这个特殊问题:

    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    header("Pragma: no-cache"); 
    

    这些当然应该只在用户登录时设置,因为缓存通常应该被认为是一件好事。

    【讨论】:

    • 嗨,Repox,你能解释一下这一行吗: header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");我认为,这个日期时间应该小于当前日期时间。对吗?
    • @vin 这告诉浏览器内容在那个特定日期过期(这是很久以前的) - 这本质上是强制浏览器不获取内容的缓存版本的方法之一。
    • @vin 是的,基本上 - 只要日期早于当前时间。
    • Hey Repox:还有一件事,成功注册后用户不应该返回注册表单页面。它会为此工作吗?
    • @vin 这与您的代码逻辑有关,而不是缓存。
    【解决方案2】:

    你需要强制它刷新页面而不是从缓存中加载它。

    加上不同的浏览器处理这个不同。尝试在浏览页面上向您的文档添加第二部分

    <HEAD>
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    </HEAD>
    

    【讨论】:

      【解决方案3】:

      你为什么不在你的欢迎页面上检查身份验证。

      例子:

      if($_SESSION['authenticated'] = true) include('welcome.php') else include('login.php)

      另一个更好的应用是使用标头重定向。 header('Location: ' (LINK) );

      【讨论】:

      • 这不会在您按下返回按钮时强制浏览器重新加载页面。
      【解决方案4】:

      如果你使用的是 CakePHP 2,你也可以这样做

      $this->response->disableCache();
      

      这基本上与 Repox 给出的答案相同

      【讨论】:

        猜你喜欢
        • 2014-08-15
        • 1970-01-01
        • 2015-07-07
        • 2012-07-21
        • 2017-01-26
        • 2018-01-30
        • 2023-03-11
        • 2017-07-01
        • 2017-07-14
        相关资源
        最近更新 更多