重定向后丢失会话变量

Shi*_*ans 3 php session

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

重定向到同一个域,所有页面都有 session_start();

而且我发现它更有可能发生在IE中而不是FF ...奇怪.

Dan*_*uis 7

是否可能未启用Cookie?

为了能够将会话变量与特定客户端实例相关联(即,如何在浏览器和我的浏览器上同时使用会话变量而不会发生冲突),可以使用"会话ID"(或"SID") )每个会话生成.此ID通常以cookie的形式存储在服务器和客户端上.但是,如果未启用cookie,则会话ID将作为每个请求中URL的查询字符串的一部分传递,以便服务器可以知道哪个会话ID属于客户端.

当您通过header()调用重定向时,PHP不会自动将SID插入到新请求中,因此您需要自己附加它,格式为:

header("Location: my_url.com/my_page.php?" . SID)
Run Code Online (Sandbox Code Playgroud)

其中SID是PHP定义的常量,它包含查询字符串的必要部分(相当于session_name() . '=' . session_id(),如果存在会话ID).

有关更多详细信息,请参阅传递会话ID.


小智 5

我刚才遇到了类似的问题,解决方法是简单地添加一个exit(); 标题(..)重定向下的指令.