2010-07-13 66 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