[英]session_id() error
盡管我對session_id()不太明確,
我在php中使用這樣的代碼
在a.php
我正在使用此代碼
$_SESSION['sid']=session_id();
當我在b.php
,我在回顯會話sid,然后像這樣取消設置。
echo $_SESSION['sid'];
unset($_SESSION['sid']);
顯示d5tk0123nmj56
再次當我訪問a.php然后b.php時,我再次得到相同的結果d5tk0123nmj56
噓第二次會議的SID是不同的??? 因為我已經在b.php
取消了會話。
EDIT:
我正在localhost
測試
ANOTHER EDIT
用描述性的方式來解釋大家,..我正在使用購物車系統,首先要檢查用戶是否通過其電子郵件ID登錄,因此$ _session ['logged_user'] = user_email是一個會話。 $ _session ['sid'] = session_id()是唯一的會話,用於標識購物車的交易,在用戶結帳(付款)后,他可能會再次以狀態登錄來購買商品,然后我必須再次檢查他是否已登錄(因此需要存在logged_user),對於下一個事務,我想為他分配$ _SESSION ['sid'] =一個新的session_id()的另一個值;
據我所知(可能是我錯了),session_destroy()殺死了所有用戶會話,這也將破壞會話$ _SESSION ['logged_user']。
我認為您想破壞會議。 嘗試
session_destroy();
要重新生成會話ID,請嘗試:
session_regenerate_id(true);
這是因為用戶仍然具有相同的會話,您絕不會從用戶的角度結束它。 您只是在服務器端取消了一些會話數據。
會話ID通過cookie(默認情況下稱為PHPSESSID)發送到服務器。 在b.php
您將在服務器端取消會話數據的設置,但是下次用戶訪問a.php
,他們將發送相同的cookie並以與以前相同的ID開始會話。
session_destroy()
。 (這不會更改會話ID或取消設置客戶端Cookie) 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 =星期一,2010年12月27日16:47:57 GMT
PHPSESSID = gigtleqddo84l8cm15qe4il3q3; 路徑= /
(您可以在這里不用setcookie()
調用,因為無論如何您都在創建新的會話,因此cookie將被新的ID覆蓋,但是最好是明確銷毀舊的cookie)。
您並沒有以這種方式終止會話,只是取消設置一個保存會話ID的變量。 如果您這樣做:
$unsetMe = session_id();
unset($unsetMe);
您只需設置一個變量,就不會對會話執行任何操作。 您需要使用:
session_destroy();
您取消設置server-global-var $_SESSION['sid']
,而不是真正的會話ID
使用session_destroy();
“重置” session_id
要生成新的會話ID並將其存儲在舊ID的位置:
$_SESSION['sid']=session_regenerate_id(true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.