user_id
)加载到会话变量中。header('Location')
重定向。重定向到同一个域,所有页面都有session_start();
而且我发现它更有可能发生在IE中而不是FF ......奇怪。
答案 0 :(得分:7)
是否可能未启用Cookie?
为了能够将会话变量与特定客户端实例相关联(即,如何在浏览器和我的浏览器上同时使用会话变量而不会发生冲突),可以使用“会话ID”(或每个会话生成“SID”)。此ID通常以cookie的形式存储在服务器和客户端上。但是,如果未启用cookie,会话ID将作为每个请求中URL的查询字符串的一部分传递,以便服务器可以知道哪个会话ID属于客户端。
当您通过header()
调用重定向时,PHP不会自动将SID插入到新请求中,因此您需要自己附加它,格式为:
header("Location: my_url.com/my_page.php?" . SID)
其中SID
是PHP定义的常量,包含查询字符串的必要部分(如果存在会话ID,则等效于session_name() . '=' . session_id()
)。
有关详细信息,请参阅Passing the Session ID。
答案 1 :(得分:5)
我遇到了类似的问题,解决方法是在标题(..)重定向下添加 exit(); 指令。
答案 2 :(得分:2)
两个想法:
答案 3 :(得分:1)
header("Location: my_url.com/my_page.php?" . SID)
exit();
只有在我exit()
header();
后才能生效
答案 4 :(得分:0)
WordPress文档指出,如果更改了用户密码,将清除cookie。无论重定向是否发生,这都会导致会话中断。只要您可以阻止cookie被清除(并且exit()
可能会像其他答案中所建议的那样),而不是会话应该保留。
注意:如果正在更新当前用户的密码,则为cookie 将被清除!
http://codex.wordpress.org/Function_Reference/wp_update_user
答案 5 :(得分:0)
我今天遇到了这个问题,并一直在寻找解决方法。我已经拥有了其他所有人都提到过的内容,无法在任何地方找到答案。
最后,我在使用Firebug
观看会话变量后找到了答案。我注意到,在变量丢失的页面上,会话Parameter:secure
被设置为true
,原因我不知道。
修复是在创建会话之前将secure
参数设置为false 。
我使用session_set_cookie_params
完成了此操作。像这样:
session_set_cookie_params([lifetime], [path], [domain], false, true);