2013-04-27 153 views
0

我遇到了PHP會話丟棄數據並重定向回我的登錄頁面的問題。PHP會話丟失

這是目錄結構我從頂部有:


  1. 登錄//包含文件的登錄/退出
  2. 主要//包含頁登錄用戶
  3. 指數。 php //完全操作形式的登錄屏幕

在登錄目錄中:check_login.php

在主目錄:page1.php中,文件夾1和文件夾2

在文件夾1:home.php,include1.php

在文件夾2:include2.php

(如果這不是很抱歉很容易理解)


這是我對check_login.php登錄時運行這些代碼:

session_start(); 
$_SESSION["id"] = $id; 
header("location:../main/page1.php"); //into main directory 

的所有頁面都包含相同樣式(標題,導航和頁腳)以及具有每頁所以因此我使用包括包含在根據內容文件夾1和文件夾2所顯示的變化一個主要內容塊。默認情況下,home.php包含在位於folder1中的主頁中。其他頁面使用包括include1.php或include2.php,它們可以來自任一文件夾。

在page1.php中的頂部:

session_start(); 
if($_SESSION["id"] == '') 
{ 
header("location:../index.php"); 
} 

從page1.php中,如果我瀏覽到一個頁面,其中一個包括位於folder1中,能正常工作。如果我導航回家,一個包括也在folder1這工作正常。兩次我都可以從會話中讀取id變量。

但是,如果我瀏覽到的網頁與包括位於文件夾2我重定向到我的登錄頁面。

任何想法?

+0

如果我理解正確,問題可能是您重定向到文件夾2時沒有聲明「session_start()」 – Yaakov 2013-04-27 23:37:02

+0

我可以在其中切換的文件夾1中的包含沒有session_start();在頂部,這工作正常。文件夾2也沒有。不過,我已經嘗試把session_start();在所有包含這兩個文件夾的頂部,仍然是同樣的問題。 – Matteth13 2013-04-27 23:39:30

+0

「index.php」包含什麼? – Yaakov 2013-04-27 23:41:42

回答

0

你需要總是包括您的會話開始。一個好的方法是創建一個header.php或bootstrap.php或類似的文件,你可以在依賴會話的每個擴展文件的開頭添加include_once。然後,您的代碼將變得更清潔,更易於管理,除了正常工作。

+0

我試過這個,它仍然不起作用。 – Matteth13 2013-04-27 23:44:37

+0

也許這個問題不在你的PHP代碼中,而是在於你的瀏覽器刷新會話或服務器沒有正確地保存會話。你的軟件堆棧是什麼樣的? – 2013-04-27 23:54:39

+0

那麼服務器必須正確保存會話,因爲它允許我在包含在同一個目錄之間移動。 你是什麼意思的軟件堆棧? – Matteth13 2013-04-27 23:58:48

0

我已經解決了這一點,並不能相信我的白癡。

在的包括我在那裏呼應鏈接到其他網頁之一,這是錯誤的,實際上是指向我的登錄頁面一直。現在一切正常,感謝所有的幫助。典型的小學生錯誤。