【问题标题】:Redirect to old page at logout in PHP在 PHP 中注销时重定向到旧页面
【发布时间】:2011-10-29 12:32:39
【问题描述】:

我正在开发一个 CMS。我有 3 个脚本和 2 个会话变量

 $_SESSION['logged']
 $_SESSION['redirect'] 

"auth.inc.php" - 每次用户请求页面时运行。它检查 $_SESSION['logged'] 是否设置并等于 1。如果它没有使用

重定向主页
header(location:index.php)

页面引用链接保存在 $_SESSION['redirect'] 中。如果 $_SESSION['logged'] 设置为非活动时间小于所需值,它会重定向到请求的页面,否则它会重定向到 logout.php

"index.php" - 检查用户名和密码。我成功套了

$_SESSION['logged']=1

如果设置了 $_SESSION['redirect'] 则重定向到该页面,否则重定向到默认页面

"logout.php" - 它使用

取消设置和销毁会话
session_unset();
session_destroy();

但是我希望如果用户由于会话超时而注销,那么在登录后它应该被重定向到旧页面。由于我正在取消会话 $_SESSION['redirect'] 丢失了。所以我没有使用 session_unset() 我只取消设置 $_SESSION['logged']

unset($_SESSION['logged']);
session_destroy();

但我仍然无法在 session_destroy() 之后检索 $_SESSION['redirect']。变量仍未设置。由于会话过期,我应该如何在注销后重定向到旧页面

【问题讨论】:

    标签: php session redirect session-variables


    【解决方案1】:

    @马克托勒: 抱歉,我现在不能发表评论。 我想说的是,并不是所有的Browser都支持referer页面,比如IE。

    【讨论】:

    • 嘿 Wei,我的意思是我应该澄清的是,我的意思是使用服务器的引用,例如使用 Apache 它将是 $_SERVER['HTTP_REFERER']
    【解决方案2】:

    你的第一个问题是当你调用 session_destroy() 时你仍在销毁 $_SESSION['redirect']。您可以做的是将默认 URL 硬编码到系统中,以便您可以销毁会话并仍然重定向。 另一种选择是删除 session_destroy() 命令,直到您重定向之后......即在重定向页面上,检查前一页(引用者)是否是 logout.php,如果它破坏了会话,否则不要

    【讨论】:

      【解决方案3】:

      session_destroy() 实际上会销毁当前会话的数据。要使用您设置的任何值,您必须再次使用 session_start()。

      此外,如果会话过期,您设置为会话 cookie 的任何内容都将无效。

      您可以做的最好的事情是将最后一页或其他任何内容保存在数据库中,因为您说用户可以登录。然后在登录时获取该值,并重定向到它。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-04
        • 2018-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        • 2014-01-04
        相关资源
        最近更新 更多