2013-01-31 31 views
3

我试着将REQUEST_URI存储在下面代码的会话中。当访问者登录我们网站的页面时,我需要存储第一个REQUEST_URI,并且在他们开始浏览页面时不会覆盖它。这不起作用,因为我浏览网站时看到回显显示一个新的URI。获取REQUEST_URI并且不覆盖

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

echo $_SESSION['theuri']; 
+2

你的代码是有效的。你的会话处理器必须有一些东西(超时,没有cookie,sessionpath现在可写)。你有自定义会话处理程序吗? –

+0

@John我在堆栈中找到了这个代码片段,并且做了一个小小的mod来获取URI而不是referrer。我确定会话保存路径没问题。 Cookie也在设置。 – Anagio

+0

@John我再次检查了会话保存路径/ tmp它是可写的 – Anagio

回答

0

我发现这篇文章说这个代码添加到我的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(); 
} 
0

清除cookie并重试。这可能是首次设置,当你从未有过的空()条件并没有改变,因为

+0

这没有帮助 – Anagio

0

您可以试试这个技巧:

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

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

0

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

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

+0

我试着把session_start()放在索引的最顶端,甚至在标头函数之前。仍然没有保存。 – Anagio

+0

您是否从页脚中删除了session_start?而session_start现在在index.php中?如果你把你的代码放在一个测试文件test.php中,它是否正常工作(而不是$ _SERVER ['REQUEST_URI'] use time())? –

+0

看我的答案我需要添加一些代码到我的主题功能,它现在正在工作 – Anagio

相关问题