簡體   English   中英

setcookie() 和 session_set_cookie_params() 函數的區別

[英]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.

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