【问题标题】:Get REQUEST_URI and don't overwrite获取 REQUEST_URI 并且不要覆盖
【发布时间】:2013-01-16 04:47:39
【问题描述】:

我尝试使用以下代码将 REQUEST_URI 存储在会话中。当访问者登陆我们网站上的页面时,我需要存储第一个 REQUEST_URI,并且在他们开始浏览页面时不要将其覆盖。这不起作用,因为我在浏览网站时看到了 echo 显示的新 URI。

session_start();
if ( !isset( $_SESSION['theuri'] ) ) {
    if ( !empty( $_SERVER['REQUEST_URI'] ) ) {
        $_SESSION['theuri'] = $_SERVER['REQUEST_URI'];
    }
}

echo $_SESSION['theuri'];

【问题讨论】:

  • 您的代码有效。会话处理程序必须有一些东西(超时、没有 cookie、会话路径现在可写)。您有自定义会话处理程序吗?
  • @John 我在堆栈上找到了这个 sn-p 并制作了一个小模块来获取 URI 而不是引用者。我确定会话保存路径很好。 Cookie 也在设置中。
  • @John 我仔细检查了会话保存路径 /tmp 它是可写的
  • 客户端接受cookies?
  • @BjørneMalmanger 是的 cookie 已启用

标签: php session-variables session-cookies


【解决方案1】:

我发现这篇文章说要将此代码添加到我的functions.php,现在我的页脚中的代码工作正常。

http://devondev.com/2012/02/03/using-the-php-session-in-wordpress/

add_action('init', 'myStartSession', 1);
add_action('wp_logout', 'myEndSession');
add_action('wp_login', 'myEndSession');

function myStartSession() {
    if(!session_id()) {
        session_start();
    }
}

function myEndSession() {
    session_destroy ();
}

【讨论】:

    【解决方案2】:

    您必须在任何输出之前启动会话,以便正确设置 cookie。 Wordpress 是无状态的,根本不使用会话。 你提到你把这段代码放在页脚,所以可能已经有输出了。

    一个 hacky 解决方案是在 index.php 顶部或 wp-config.php 中输入 session_start()。

    【讨论】:

    • 我尝试将 session_start() 放在索引的最顶部,甚至在标头函数之前。仍然没有保存。
    • 您是否从页脚中删除了 session_start? session_start 现在在 index.php 中吗?如果你把你的代码放在一个测试文件 test.php 中,那么它是否可以正常工作(而不是 $_SERVER['REQUEST_URI'] 使用 time())?
    • 查看我的答案 我需要在我的主题函数中添加一些代码,现在可以使用了
    • 会话开始现在在我的functions.php中
    【解决方案3】:

    你可以试试这个技巧:

    if(session_id() == '') 
         session_start();
    

    如果 WP 尝试为您启动会话,应该会有所帮助。

    【讨论】:

      【解决方案4】:

      清除您的 cookie,然后重试。它可能是第一次设置的时候你从来没有 !empty() 条件并且从那时起就没有改变

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        • 2016-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多