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