2010-07-13 65 views
2

PHP会议在它的最简单的,如果file_1.php包含问题与XAMPP

<?php 

    session_start(); 

    $_SESSION["test_message"] = "Hello, world"; 

    header("Location: http://localhost/file_2.php"); 
?> 

和file_2.php包含

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
</head> 
<body> 

<?php 

    if (!(isset($_SESSION["test_message"]))) 
    echo "Test message is not set"; 
    else 
    echo $_SESSION["test_message"]; 

var_dump($_SESSION); 

    session_destroy(); 
?> 

</body> 
</html> 

结果是Test message is not set和后续代码var_dump($ _ SESSION)返回null - locally, with Xampp。但是,如果我上传的那些相同的文件到付费的托管网站,它的工作原理,我看到

Hello, world 
array 
    'test_message' => string 'Hello, world' (length=12) 

当我看着PHPINFO XAMPP下,它显示Session Support enabled。我究竟做错了什么?

回答

3

你已经忘记了在session_start在file_2.php

所以顶部应该是:

<?php 
session_start(); 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
</head> 
<body> 

<?php 

    if (!(isset($_SESSION["test_message"]))) 
    echo "Test message is not set"; 
    else 
    echo $_SESSION["test_message"]; 

var_dump($_SESSION); 

    session_destroy(); 
?> 

</body> 
</html> 

session_start()应该在每一个地方,你需要访问会话功能文件的顶部。

编辑:

你真的应该重定向到另一个页面之前使用session_write_close。

第一个文件:

<?php 
session_start(); 

$_SESSION["test_message"] = "Hello, world"; 

session_write_close(); 
header("Location: http://localhost/file_2.php"); 
?> 
+0

在session_start();在file_2的顶部?为什么不是file_1的开始?这是会话开始的地方,它设置了fiel_2将检索的会话变量。 – Mawg 2010-07-13 08:58:33

+1

它必须在两个脚本中。 session_start()不*初始化_new_会话,它启动php的会话处理机制,您必须在每个php实例中(至少)执行一次该操作,以便使用会话数据。新请求,php的新实例,新的session_start()。 – VolkerK 2010-07-13 09:01:05

+0

好的,你们两个都这么说 - 我已经+1了。但它仍然不起作用 – Mawg 2010-07-13 09:06:43

1

会话问题可以固定在XAMPP 7.1.6执行下列操作在php.ini 线#变化1403

session.auto_start = 1