[英]Difference between session_set_cookie_params(seconds) and ini_set("session.cookie_lifetime", seconds)
[英]Difference between setcookie() and session_set_cookie_params() functions
我試圖了解 PHP 函數 setcookie() 和 session_set_cookie_params() 之間的區別。
看起來這兩個函數都在執行相同類型的任務,但 setcookie() 可用於創建具有名稱和值的 cookie。
我試圖理解 PHP 手冊,但沒有指出其中的明顯差異。
謝謝
session_set_cookie_params(秒)
session_start() 做兩件事,它在服務器上創建一個臨時文件來存儲會話數據,並向用戶的瀏覽器發送一個 cookie。 此 cookie 具有默認過期時間,因此調用 session_set_cookie_params(seconds) 會將 cookie 的默認過期時間更改為您定義的時間。 cookie 基本上將客戶端指向他們的會話,因此需要訪問會話。
設置 Cookie()
其中 setcookie() 函數定義了一個 cookie 與其余的 HTTP 標頭一起發送。
有兩種類型的 cookie:
會話 cookie :這些是 session_set_cookie_params() 並且這些是臨時 cookie 文件,當您關閉瀏覽器時會刪除這些文件。
持久性 cookie :這是 setcookie() 並且這些文件保留在您瀏覽器的子文件夾之一中,直到您手動刪除它們或您的瀏覽器根據持久性 cookie 中包含的持續時間刪除它們。
例如,如果您想將 cookie 保存 1 周:
$remembering_timespan = time() + 7 * 24 * 60 * 60;
setcookie('test','username', $remembering_timespan);
基本上是不一樣的。
對於setcookie
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
?>
您可以像上面那樣設置超時會話,名稱和值本身。 至於 session_set_cookie_params:
session_set_cookie_params(
$currentCookieParams["lifetime"],
$currentCookieParams["path"],
$rootDomain,
$currentCookieParams["secure"],
$currentCookieParams["httponly"]
);
您可以在此處設置路徑、cookie 本身的到期時間、根域、安全級別和更多參數http://php.net/manual/en/function.session-set-cookie-params.php
通過 PHP 的有效方法如下:
<?php
$currentCookieParams = session_get_cookie_params();
$rootDomain = '.example.com';
session_set_cookie_params(
$currentCookieParams["lifetime"],
$currentCookieParams["path"],
$rootDomain,
$currentCookieParams["secure"],
$currentCookieParams["httponly"]
);
session_name('mysessionname');
session_start();
setcookie($cookieName, $cookieValue, time() + 3600, '/', $rootDomain);
?>
高效的編碼器確保在設置參數本身之前先設置參數,以便在用戶離網時。 cookie 本身已過期。
使用session_set_cookie_params()
您可以定義 cookie 選項(如生命周期等)。 如果會話開始,這些值將用於發送到客戶端的 cookie。 然而,cookie 僅在會話開始時發送,而不會用於來自客戶端的任何進一步請求。 這意味着在達到[session start time] + [timeout]
后客戶端將刪除 cookie。 您可以有效地定義會話的最大生命周期。
而setcookie()
實際上重新發送 cookie,不管它是新會話還是現有會話。 這意味着每次請求都會更新 cookie,客戶端只會在[time of last request] + [timeout]
達到后將其刪除。 您可以有效地定義會話的最長不活動時間。
setcookie()定義了一個與其余 HTTP 標頭一起發送的 cookie。 與其他標頭一樣,cookie 必須在腳本的任何輸出之前發送(這是協議限制)。 這要求您在任何輸出之前調用此函數,包括和標簽以及任何空格。
要使 setcookie()工作,您需要為每個請求調用session_set_cookie_params()並且在調用session_start()和其他類似setcookie() 之前。
我認為,setcookie() 和 session_set_cookie_params() 函數之間的區別可能是轉 domain.com 和 sub.domain.com。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.