2012-07-18 126 views
0

我想知道是否有人可以幫助我。php會話變量在表單提交頁面之間丟失

如果我在頁面details.php(代碼如下),有一個表單提交按鈕(除其他外)。

當表單的提交按鈕被點擊時,你被帶到process_tenant.php。

問題是會話變量valid_user似乎沒有與它一起出現。我在兩頁的開始處都有session_start(),會話變量是絕對設置的,並且從不會在details.php上覆蓋.php

任何人都能告訴我爲什麼?

details.php

<?php 
session_start(); 

    $_SESSION['valid_user'] = 'admin'; 

    echo $_SESSION['valid_user'];  //This prints out admin 
?> 

<!DOCTYPE HTML> 
<html> 
<head> 
     ... 
    </head> 

    <body> 
     ... 

     <form action='process_tenant.php' method='POST'> 
      ... 
     </form> 
    </body> 
</html> 

process_tenant.php

<?php 
    session_start(); 

    if (isset($_SESSION['valid_user'])) 
    { 
     echo 'heya';   //This does not print 
    } 

    echo 'hi' . $_SESSION['valid_user']; //This just prints 'hi' 
?> 

... 
+0

您是否使用session_destroy()銷燬了會話? – phphunger 2012-07-18 12:28:29

+0

不,無處。我想知道如果它可能是一個PHP配置問題?因爲代碼似乎沒有任何問題。 – 2012-07-20 08:24:06

+0

修復了這個問題,謝謝。我沒有破壞會話,但我用「」 – 2012-07-20 11:37:04

回答

0

的config.php

<?php 
ob_start(); 
session_start(); 
$_SESSION['valid_user'] = admin; 
?> 

Details.php

<?php 
include('Config.php'); 
?> 

process_tenant.php

<?php 
include('Config.php'); 

if (isset($_SESSION['valid_user'])) 
{ 
    echo 'heya'; 
} 
echo 'hi' . $_SESSION['valid_user']; 
?> 
+0

謝謝,但添加ob_start()似乎沒有區別。 – 2012-07-18 12:08:30

+0

我編輯了答案。請立即檢查。 – Dhruvisha 2012-07-18 12:14:50

+0

這沒有什麼區別。它只是寫在不同文件中的相同代碼。 – 2012-07-18 12:16:10

-1

開始只有一次,即使用session_start()只有一次,從process_tenant.php取出,放然後我知道做一次。

+0

覆蓋valid_user session_start()確實需要爲每個PHP調用調用一次。由於他沒有在process_tenant.php文件中包含details.php文件,所以他需要調用session_start()。 – davidethell 2012-07-18 11:46:26

+0

如果您在兩個頁面的頂部不包含session_start(),則會引發大量錯誤。你一定需要session_start()。 – 2012-07-18 12:09:21

0

在details.php中,admin值並不等於任何值。它需要是一個變量或一個字符串或某種有效類型,否則它將被取消設置。

試着改變你的代碼如下:

$_SESSION['valid_user'] = 'admin'; 
+0

它實際上從數據庫中獲取值,但爲簡單起見,我只是放了= admin。但是,是的,我確實在我的問題中忘記了''。謝謝 – 2012-07-18 12:03:29