2010-07-15 164 views
1

我的網站不能正常啓動,當我訪問一個會議上,我不知道爲什麼,但我的網站是這樣的:會話不工作PHP

<?php 

session_start(); 

$title = "Home"; 

include("include/header.php"); 
include("include/functions.php"); 

?> 

...HTML stuff here... 

<?php 

include("footer.php"); 

?> 

但是當我檢查與餅乾(添加爲Firefox)沒有開始會話...我用session_regenerate_id();但它根本不起作用。

由於沒有會話,所以無法登錄,我沒有任何session_destroy()在我的網站,只在註銷。

但有趣的是,當我登錄(沒有刷新或導航只是),然後點擊註銷按鈕,我的網站上有一個會話,然後當我再次登錄時,它告訴我,我登錄在但如果我登錄並瀏覽或刷新,它並沒有告訴我,我登錄,因爲沒有會話...

註銷:

<?php 

session_start(); 
session_destroy(); 

setcookie("cookie-name", "", time()-60, "", "", 0); 

header("Location: ../index.php"); 

exit; 

?> 

我該怎麼辦?

+0

您使用的是什麼錯誤報告級別? – Gumbo 2010-07-15 17:37:56

回答

1

不確定它是否相關,但是有一個奇怪的PHP怪癖,要求SESSION_START()在<?php標記的正下方。關於會話之上的空白和額外的東西,常常會讓我感到厭煩。最近我一直在使用Zend,它可以避免使用它自己的會話處理系統的問題。

您可能會嘗試執行print_r($ _ SESSION)來查看會話數組中是否有任何內容。

+0

我試過了,也var_dump($ _ SESSION),但它似乎沒有什麼。 – MacMac 2010-07-15 17:41:14

+0

如果問題沒有解決,爲什麼這是公認的答案? – 2013-11-20 13:10:57

+1

誰說它沒有解決?如果被接受,這意味着他們認爲它有幫助。在下一次選擇答案之前,請仔細考慮兩次,OP表示最好。 – bpeterson76 2013-11-20 17:11:45

3

您必須在每個正在訪問的文件的開頭都有session_start()並使用會話。名稱有誤導性,session_start()實際上並未啓動新的會話,但初始化 PHP會話管理。

+0

index.php,login.php,register.php在包含header.php和其他文件之前就有session_start()。 – MacMac 2010-07-15 17:42:26

1

這可能是因爲您沒有在給出的任何一個示例中設置會話,您必須具有如下所示的行才能實際創建會話,然後在隨後的所有頁面上訪問會話變量需要session_start();

$_SESSION['example'] = 'something'; 
+0

當我想登錄時,它會寫入會話:$ _SESSION ['USER'] = $ row ['username'];但在輸出中它不工作,會話根本不會工作 – MacMac 2010-07-15 17:56:14

+0

您是否檢查過以確保$ row ['username']包含值? – Catfish 2010-07-15 18:06:49

1

它看起來不像你在會話或cookie中設置任何東西。

如果您想在會話中傳遞信息,則需要在$ _SESSION變量中分配必要的值。

例如您的主頁上,你可以這樣做:

<?php 
session_start(); 
$_SESSION['myVariable'] = "my text"; 
?> 

,然後在任何後續的網頁,你可以訪問你所設置的變量。

<?php 
session_start(); 
echo $_SESSION['myVariable']; //This will print "my text" 
?> 
+0

我知道如何做會話,如果我在session_start()之後編寫會話,它不起作用 – MacMac 2010-07-15 17:57:06