了解協定切換期間會話變數的遺失
在同一域內從HTTP 轉換到HTTPS 時,使用者經常遇到以下問題:遺失$_SESSION 變數。出現此問題的原因是 HTTP 會話 ID 不會自動傳輸到 HTTPS 會話。不過,有多種方法可以手動設定會話 ID,確保跨協定的會話連續性。
解決方案:設定會話ID
方法1:使用session_start()
session_start() 要麼建立一個新會話,或根據以下內容恢復現有會話透過請求傳輸的目前會話ID。如果沒有設定會話 ID cookie,session_start() 會建立一個新的。
方法 2:使用 session_id()
如果未設定會話 ID,您將可以使用session_id()函數手動設定它。以下是如何擷取目前會話ID:
$currentSessionID = session_id();
將會話cookie 設定為特定ID:
session_id($aSessionID);
方法3:手動傳輸會話ID
您也可以使用GET 或POST 手動傳輸會話ID
腳本 1 (HTTP):
session_start(); $currentSessionID = session_id(); $secureServerDomain = 'www.yoursite.com'; $securePagePath = '/safePages/securePage.php'; echo '<a href="https://' . $secureServerDomain . $securePagePath . '?session="' . $currentSessionID . '">Click here to transfer your session to the secure server</a>';
腳本 2 (HTTPS):
$currentSessionID = $_GET['session']; session_id($currentSessionID); session_start(); if (!empty($_SESSION['testvariable'])) { echo $_SESSION['testvariable']; } else { echo 'It did not work.'; }
以上是從 HTTP 切換到 HTTPS 時如何保留會話變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!