簡體   English   中英

session_id()錯誤

[英]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)
  • 要生成新的會話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 =星期一,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

PHP:session_destroy()手冊

要生成新的會話ID並將其存儲在舊ID的位置:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM