2015-01-07 55 views
0

我有一個網站samplewebsite.com,登錄功能和會話工作正常。PHP - 在其他頁面無法訪問會話

現在我正在創建一個涉及在登錄頁面啓動的會話的新頁面,該頁面位於samplewebsite.com/sample.php。該文件現在只包含以下代碼。

session_start(); 
if(isset($_SESSION)){ 
print_r($_SESSION); 
} 

這將輸出一個空數組。當我檢查Chrome的開發人員工具時,Cookie選項卡包含一個PHPSESSID,我認爲這意味着會話實際上已啓動。

我非常沮喪爲什麼在我samplewebsite.com我登錄和會議正確拿起,而在samplewebsite.com/sample.php我無法得到我需要的會議。

服務器的會話配置中是否存在某種錯誤?可能出現什麼問題或者這個問題的可能原因是什麼?

編輯:

這是我的登錄文件的一個片段。

include "db.php"; 
if (!isset($_SESSION)){session_start(); } 

if (isset($_SESSION['admin'])){header("Location: /"); } 

if(isset($_POST['submit'])){ 

    $query = mysql_query("Select * from users where `username`='".mysql_real_escape_string($_POST['username'])."' and `password`='".md5(mysql_real_escape_string($_POST['password']))."'"); 

    if(mysql_num_rows($query) > 0){ 

     $row = mysql_fetch_assoc($query); 

     $_SESSION['admin'] = $row['ID']; 

     header("Location: /"); exit(); 


    } 
    else{ 

     echo "<script>alert('Account Invalid')</script>"; 

    } 


} 

會話已初始化,因爲如果不是我會被重定向到登錄頁面(因爲在index.php的重定向功能,其中如果$ _SESSION [「管理」]沒有設置,重定向到登錄的) 。這通過手動刪除chrome的開發工具上的會話進行測試,並刷新頁面將使我登錄頁面。

所以我登錄了,我看到我的會話在samplewebsite.com上工作,但在samplewebsite.com/sample.php的其他標籤上,當我嘗試時,我無法回顯出$ _SESSION ['admin']

echo $_SESSION['admin']; 
+8

如果你沒有在會話中放置任何東西,它將是空的。 –

+0

你在哪裏設置你的會話變量? –

+0

啓用error_reporting和display_errors,確保在您致電session_start()之前沒有發送任何輸出() – donald123

回答

0

默認情況下,SESSION數組是空的,你必須初始化你的變量。

例如:

session_start(); 

$_SESSION['test'] = 'my test'; 

if(isset($_SESSION)){ 
print_r($_SESSION); 
} 

然後你會看到 '我的測試' 輸出。
不要忘記在每個php頁面中初始化會話以便能夠訪問您的變量。

0

這是錯誤的:

if (!isset($_SESSION)){session_start(); } 

只是

session_start(); 

之初

0

每一頁上。雖然這可能不是一個合適的答案,我現在有一個想法,爲什麼我不能沒有拿起會議。

當我在查看chrome的開發工具的Cookie選項卡時。我注意到會話存儲在不同的域中。可能是因爲我在

http://www.samplewebsite.com/login.php 

記錄在會話存儲在一個名爲域

www.samplewebsite.com 

當我試圖從

samplewebsite.com/sample.php 

是基於在其會話訪問會話域

samplewebsite.com 

我完全忽略了我的一個愚蠢的錯誤的網址,我完全失去了兩個領域之間的差異,也許只是缺乏一般知識等。

感謝您的快速響應。

相關問題