2012-07-09 104 views
0

如果这看起来类似于这里发布的其他问题,我忍受了我,我已经通过所有提供的答案,但没有解决了我的问题。我已将问题减少到最低限度。头重定向后会话变量丢失

  1. 我有两页(page1.php中,使page2.php)
  2. 创建page1.php中会话变量,如果会话变量被设置它,然后将浏览器则page2.php
  3. 在第2页.php浏览器应该显示在Page1中设置的会话变量的值。 php
  4. 我的问题是,page2.php将会话变量视为未设置。
  5. 我已经试过张贴在堆栈溢出的其他用户的所有解决方案,你可以从下面的我的代码,请参阅:

page1.php中

<?php 
//start the session 
session_start(); 

//set the session 
$_SESSION['mysession'] = "Hello"; 


if(isset($_SESSION['mysession'])){ 
    //redirect the person to page 2 
    session_write_close(); 
    header("Location: page2.php?PHPSESSID=".session_id()); 
    exit(); 
} else { 
echo "Session Not Set"; 
} 
?> 

使page2.php


<?php 
//start the session 
session_start(); 
session_id($_GET['PHPSESSID']); 

if (isset ($_SESSION['mysession'])) 
    echo $_SESSION['mysession']; 
else 
    echo "Session not set!"; 
?> 
+0

当你让会发生什么会话开始时没有发送/设置ID?标题(“位置:page2。php“);在第1页和// session_id($ _ GET ['PHPSESSID']);第2页 – 2012-07-09 14:46:54

+0

会话扩展是否被配置为读出'PHPSESSID ='参数?(你通常不会自己进行微操作)。重定向的网址?是否仅使用Cookie测试?Cookie是否已设置? – mario 2012-07-09 14:47:47

+0

第二页是否在同一个域中? – Razvan 2012-07-09 14:48:17

回答

2

SESSION_ID()需要在session_start之前被称为()

如果指定ID,则它将取代目前的会话ID。 session_id()需要在session_start()之前被调用,以达到 的目的。根据会话处理程序的不同,在会话ID内不允许所有字符均为 。例如,文件会话处理程序 仅允许范围为a-z A-Z 0-9,(逗号)和 - (减号)的字符!

注意:当使用会话cookie,指定为SESSION_ID的ID() 总是会发送一个新的cookie时在session_start()被调用时, 不管当前会话ID是相同的一个是 集。

session_id()-Manual

您以前也可能会检查您是否能够基于Cookie的身份验证集。

请注意,如果用户发布url,他们可能会将该会话带到另一个客户端。

+0

session_id查询字符串仅作为一种解决方法添加,以防万一没有设置cookie(我在本站点看到的解决方案),但即使当我离开它时,我也会得到相同的结果。 – 2012-07-09 15:11:16

+0

php会为你做这个,如果没有设置cookie,那么不用担心。检查http://www.php.net/manual/en/session.configuration.php#ini.session.use-cookies – worenga 2012-07-09 15:15:38

+0

谢谢,使用phpinfo()和session.use_cookies检查\t设置为对 – 2012-07-09 15:27:27

1

page2.php,交换前2行。更改

session_start(); 
session_id($_GET['PHPSESSID']); 

session_id($_GET['PHPSESSID']); 
session_start(); 

Parameters部分here..http://php.net/manual/en/function.session-id.php

+0

谢谢。我交换了行,但得到了相同的结果,“会议未设置” – 2012-07-09 15:00:23

+0

看到我的意见,关于你是否可能有一个基于cookie的会话处理器积极干扰你的手动设置,我相信这是事实。 – worenga 2012-07-09 15:02:43

+0

@mightyuhu谢谢,我该怎么做?我还应该提到1.代码在我的本地主机上工作得很好2.我已经在托管服务器上的不同浏览器上尝试过它,结果相同 – 2012-07-09 15:09:57