簡體   English   中英

設置cookie過期時間:“ time()-3600”是否始終正確?

[英]Is setting cookie expiration time: “time()-3600”, always correct?

用於刪除PHP中的cookie

我在互聯網上以及課程幻燈片上都讀到,如果我們將有效期設置為“ time()-3600”,我們將無法確保客戶端會刪除Cookie,

因為客戶端時間和服務器時間可以不同。

我同意上一條語句,但是如果“ time()”函數返回紀元值,為什么客戶端不刪除Cookie? 這不是絕對的價值嗎?

我認為,如果我們設置time()-3600,則響應頭set-cookie的有效期限為絕對值,並且cookie到期時瀏覽器可以解釋該值以查找數據(作為客戶端本地數據)。

我做錯了嗎?

客戶的時鍾可能與實際時間有很大差異。 在那種情況下, time()是否為絕對值都無關緊要,如果客戶端計算機的時間錯誤,則它可能將絕對時間解釋為錯誤,並認為到期時間仍在將來。

  • 根據您服務器的時鍾time()返回自1970年1月1日午夜UTC以來的秒數。
  • 然后, setcookie會將其格式化為HTTP所需的字符串格式 ,該格式始終以GMT表示。
  • 然后,客戶端(瀏覽器)將解析該日期字符串,並根據其自己的clock將其與GMT中的當前時間進行比較。

因此,正確配置的服務器和客戶端應同意time() - 3600生成的值已過去,因此將刪除cookie。

但是,有很多原因可能會導致此錯誤:

  • 服務器的時鍾提前了一個多小時。
  • 服務器的時區配置錯誤,因此time()無法正確將本地時間調整為UTC時間。
  • 客戶的時鍾已經延遲了一個多小時。
  • 客戶端的時區配置錯誤,因此無法與GMT正確進行比較。

值得注意的是,通常您不能保證客戶會做任何您想做的事情 如果出於安全原因要使會話無效,則必須在服務器上使該會話無效,並且僅出於其他便利而刪除cookie。

暫無
暫無

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

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