- 用户填写用户名和密码。
- 如果正确,页面会将一些信息(如
user_id
)加载到会话变量中。 - 该脚本使
header('Location')
重定向。 - 不知何故,下一页不会识别会话...怎么回事?
重定向是同一个域,和所有页面都session_start();
重定向后丢失会话变量
,我发现它在IE发生的可能性比在FF ...奇怪。
user_id
)加载到会话变量中。header('Location')
重定向。重定向是同一个域,和所有页面都session_start();
重定向后丢失会话变量
,我发现它在IE发生的可能性比在FF ...奇怪。
有没有可能没有启用cookies?
为了能够将会话变量与特定的客户端实例相关联(即会话变量如何在浏览器和浏览器中同时使用而不会发生冲突),“会话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)。
查看Passing the Session ID了解更多详情。
谢谢你的快速回答。你能解释一下吗? “宣传SID”是什么意思?如果这再提示 - 只是发现在本地主机上它工作正常,但在服务器上出现了问题。 – 2009-12-07 17:23:01
我已经更新了我的答案,希望更清楚。 – 2009-12-07 17:28:29
你很清楚。感谢您的帮助。不幸的是,它并没有帮助,我的cookies也被启用了,正如我所说的,在本地主机上它很好用。 仍然我无法确定是什么导致它转储会话。 有没有失去会话变量的麻烦在PHP中重定向的另一种方式? 谢谢! – 2009-12-07 18:46:33
两个想法:
header("Location: my_url.com/my_page.php?" . SID)
exit();
它只是我的header();
WordPress的文档添加下面exit()
后曾指出,如果用户的密码更改的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);
你能发表一些代码吗? – SilentGhost 2009-12-07 17:17:09