繁体   English   中英

重定向后丢失会话变量

[英]Losing session variables after redirect

  1. 用户填写用户名和密码。
  2. 如果正确,页面会将一些信息(如user_id加载到会话变量中。
  3. 该脚本使header('Location')重定向。
  4. 不知怎的,下一页不承认会议......怎么来的?

重定向到同一个域,所有页面都有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(); 标题(..)重定向下的指令。

两个想法:

  1. 在将任何内容发送到浏览器之前,session_start()是否位于脚本的顶部?
  2. 域名是否完全相同? www.mydomain.com重定向到mydomain.com会导致你描述的问题。
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM