2013-01-07 11 views
0

雖然我不那麼具體的關於SESSION_ID(),SESSION_ID()錯誤

我使用一個代碼在PHP這樣

a.php我使用這個代碼

$_SESSION['sid']=session_id(); 

當我在b.php我,我呼應會話的SID,然後像這樣取消設置吧..

echo $_SESSION['sid']; 
unset($_SESSION['sid']); 

這再次顯示d5tk0123nmj56

當我來訪a.php只會然後b.php我正在再次得到相同的結果d5tk0123nmj56

shudnt第二時間會話SID是不同???因爲我已經取消所有在b.php會話..

EDIT: 

我在localhost

ANOTHER EDIT 

測試它來解釋ü所有描述性的,.. 我使用的是購物車系統,其中第i個我檢查用戶是否通過他的電子郵件ID登錄,因此$ _session ['logged_user'] = user_email是一個會話..我使用$ _session ['sid'] = session_id()作爲唯一會話來標識事務對於購物車,在用戶結賬(支付)後,他可能再次購買他的狀態正在登錄的東西,那麼我必須再次檢查他登錄(logged_user因此需要存在),對於下一個事務,我想爲他分配另一個值$ _SESSION ['sid'] =一個新的session_id();

,因爲我知道(可能是我錯了)session_destroy()殺死所有的用戶會話,並會破壞會話$ _SESSION [「logged_user」]也..

回答

3

我想你想摧毀會話。嘗試

session_destroy(); 

要重新生成會話ID嘗試:

session_regenerate_id(true); 
+0

使用session_destroy會破壞所有的對話......我只是想爲會話sid分配一個新的會話ID .. – Saswat

+2

session_destroy()不會銷燬所有會話。它只會銷燬用戶呼叫該頁面的會話。如果您只想重新生成會話標識,請嘗試:session_regenerate_id(); – Boundless

0

您取消設置服務器全球-VAR $_SESSION['sid'],不是真正的會話ID

使用session_destroy();爲 「未設置」 的SESSION_ID

PHP: session_destroy() Manual

+0

然後如何取消設置真正的session_id();請緊急 – Saswat

+0

session_destroy(); – derWilly

1

這是因爲用戶仍然擁有相同的會話,因此從用戶的角度來看,您從任何時候都不會結束。你只是在服務器端設置一些會話數據。

會話ID通過cookie發送到服務器(默認情況下稱爲PHPSESSID)。在b.php中,您將在服務器端取消設置會話數據,但下次用戶訪問a.php時,他們將發送相同的cookie並使用與之前相同的ID開始會話。

  • 要取消設置服務器端會話數據,您應該使用session_destroy()(這不會更改會話ID或取消設置客戶端cookie)
  • 要生成新的會話ID,您可以使用session_regenerate_id(true)(這將覆蓋一個新的會話標識符的客戶端cookie,它不會破壞與會話相關的服務器端信息)

要完全結束用戶的會話,你需要摧毀服務器端信息和客戶端cookie都生成一個新的會話標識符。這裏有一個簡單的例子,

<?php 
    session_start();  
    $_SESSION['blah'] = true; 

    var_dump(session_id()); // q4ufhl29bg63jbhr8nsjp665b1 
    var_dump($_SESSION); // blah = true 

    session_unset(); 
    session_destroy(); 
    setcookie("PHPSESSID", "", 1); // See note below 
    session_start(); 
    session_regenerate_id(true); 

    var_dump(session_id()); // gigtleqddo84l8cm15qe4il3q3 
    var_dump($_SESSION); // (empty) 
?> 

的標題會顯示會話ID在客戶端改變:

請求頭
的Cookie:PHPSESSID = q4ufhl29bg63jbhr8nsjp665b1

響應頭
Set-Cookie:PHPSESSID = deleted; expires = Mon,27-Dec-2010 16:47:57 GMT
PHPSESSID = gigtleqddo84l8cm15qe4il3q3;路徑=/

(你可以逃脫不setcookie()來電來訪,因爲你無論如何創建一個新的會話,所以cookie將被新的ID被覆蓋,但它是很好的做法,明確地摧毀舊餅乾)。

1

你沒有以這種方式殺死會話,你只是取消了一個持有會話ID的變量。如果你這樣做:

$unsetMe = session_id(); 
unset($unsetMe); 

你只需要取消設置一個變量,就不會對會話做任何事情。您需要使用:

session_destroy(); 
0

要生成一個新的會話ID,並將其存儲在舊的標識的地方:

$_SESSION['sid']=session_regenerate_id(true);