cookie一次生效,cookie過期時間

本文目錄一覽:

Cookie 是什麼

Cookie 是用戶瀏覽器保存在本地的一小塊數據,它會在瀏覽器下次向 同一伺服器 再發起請求時被攜帶並發送到伺服器上。

Cookie 主要用於以下三個方面:

會話狀態管理(如用戶登錄狀態、購物車、遊戲分數或其它需要記錄的信息)

個性化設置(如用戶自定義設置、主題等)

瀏覽器行為跟蹤(如跟蹤分析用戶行為等)

✔ Domain

Domain 標識指定了哪些主機可以接受 Cookie。如果不指定,默認為當前文檔的主機(不包含子域名)。 如果指定了 Domain,則一般包含子域名(子域名可以訪問父域名的 Cookie) 。

例如,如果設置 Domain=mozilla.org,則 Cookie 也包含在子域名中(如 developer.mozilla.org)。

✔ Path

Path 標識指定了主機下的哪些路徑可以接受 Cookie(該 URL 路徑必須存在於請求 URL 中)。以字元 %x2F (/) 作為路徑分隔符,子路徑也會被匹配。

設置 Path=/docs,則以下地址都會匹配:

/docs

/docs/Web/

/docs/Web/HTTP

✔ Expires/Max-Age

Cookie 的過期時間,過了這個時間之後 Cookie 將會自動刪除。

Set-Cookie:id=a3fWa; Expires=Wed,21Oct201507:28:00GMT;

Max-Age 的單位是秒。

document.cookie=’promo_shown=1; Max-Age=2600000; Secure’

✔ HttpOnly

為避免跨域腳本 (XSS) 攻擊,通過 JavaScript 的 Document.cookie API 無法訪問帶有 HttpOnly 標記的 Cookie,它們只應該發送給服務端。如果包含服務端 Session 信息的 Cookie 不想被客戶端 JavaScript 腳本調用,那麼就應該為其設置 HttpOnly 標記。

Set-Cookie:id=a3fWa; Expires=Wed,21Oct201507:28:00GMT; Secure; HttpOnly

✔ Secure

標記為 Secure 的 Cookie 只應通過 被 HTTPS 協議加密 過的請求發送給服務端。

SameSite

SameSite Cookie 允許伺服器要求某個 Cookie 在跨站請求時不會被發送,從而可以阻止跨站請求偽造攻擊(CSRF)。

Set-Cookie:key=value; SameSite=Strict

None 瀏覽器會在同站請求、跨站請求下繼續發送 Cookies,不區分大小寫;

Strict 瀏覽器將只發送相同站點請求的 Cookie(即當前網頁 URL 與請求目標 URL 完全一致)。如果請求來自與當前 location 的 URL 不同的 URL,則不包括標記為 Strict 屬性的 Cookie;

Lax 在新版本瀏覽器中,為 默認 選項,Same-site Cookies 將會為一些跨站子請求保留,如 圖片載入 或者  iframe  不會發送,而點擊 標籤會發送;

✔ 增刪改查

設置 Cookie 和修改 Cookie 相同:

functionsetCookie(cname, cvalue, exdays) {constd =newDate()  d.setTime(d.getTime() + exdays *24*60*60*1000)constexpires =’expires=’+ d.toUTCString()return(document.cookie= cname +’=’+ cvalue +’;’+ expires +’;path=/’)}

刪除 Cookie:

functiondeleteCookie(cname) {constd =newDate()constexpires =’expires=’+ d.toUTCString()return(document.cookie= cname +’=’+’;’+ expires +’;path=/’)}

查詢 Cookie:

functiongetCookie(cname) {constcookieObj =document.cookie.split(‘;’).reduce((prev, curr) ={constentry = curr.split(‘=’)    prev[entry[0].trim()] = entry[1]returnprev  }, {})if(cname)returncookieObj[cname]returncookieObj}

✔ 不同二級域名共享 Cookie

Cookie 可以設置成給子域名共享,類似於在 x.com.cn 設置的 Cookie 可以提供給 a.x.com.cn、b.x.com.cn、suba.a.x.com.cn 等域名訪問。

比如下面的方式:

res.writeHead(200, {‘Set-Cookie’: [‘name=sub-x-com-cn; path=/;domain=x.com.cn’,’name=only-x-com-cn; path=/’],})

domain=x.com.cn 表示 domain=x.com.cn 及其子域名都可以使用, 不寫 doamin 默認只有當前域名可用,設置的 Cookie 是這樣的:

總結

設置 Cookie 時,在 x.com.cn 設置為 …;domain=x.com.cn 的 Cookie 可以給 x.com.cn 及其子域名使用;

設置 Cookie 時,在 x.com.cn 設置沒有 domain 的 Cookie 只能給 x.com.cn 使用;

父域名無法在子域名設置 Cookie ,例如在 x.com.cn 設置了 name=lxfriday;domain=subx.x.com.cn,這種設置是無效的;

✔ Cookie 常見問題

Cookie 不區分埠;

一個 Cookie 存儲上限是 4K 大小;

Cookie 只能存儲 ASCII 字元串;

✔ Cookie 安全-會話劫持和 XSS

newImage().src=”+document.cookie

HttpOnly 類型的 Cookie 由於阻止了 JavaScript 對其的訪問性而能在一定程度上緩解此類攻擊。

✔ Cookie 安全-跨站請求偽造(CSRF)

當你打開含有了這張圖片的 HTML 頁面時,如果你之前已經登錄了你的銀行帳號並且 Cookie 仍然有效(還沒有其它驗證步驟),你銀行里的錢很可能會被自動轉走。

這種情況只是一種假設,實際上應該不允許使用 GET 修改數據,對轉賬的操作需要添加二次確認。

✔ Session

Session 機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。

當程序需要為某個客戶端的請求創建一個 Session 時,伺服器首先檢查這個客戶端的請求里是否已包含了一個 Session 標識(稱為 Session ID),如果已包含則說明以前已經為此客戶端創建過 Session,伺服器就按照 Session ID 把這個 Session 檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含 Session ID,則為此客戶端創建一個 Session 並且生成一個與此 Session 相關聯的 Session ID,Session ID 的值應該是一個 既不會重複,又不容易被找到規律以仿造的字元串 ,這個 Session ID 將被在本次響應中返回給客戶端保存。

Session 從客戶端傳輸到服務端的方式有兩種:

通過 Cookie 傳輸;

通過 URL 傳輸;

表單隱藏欄位,通過在 中添加一個隱藏欄位,把 Session 傳回伺服器;

基於 Cookie 實現,會話期 Cookie 是最簡單的 Cookie: 瀏覽器關閉之後它會被自動刪除,也就是說它僅在會話期內有效 。會話期 Cookie 不需要指定過期時間(Expires)或者有效期(Max-Age)。

Set-Cookie: name=lxfriday.xyz; path=/;HttpOnly

✔ Cookie 與 Session 有什麼不同

mp.weixin.qq.com/s?__biz=MzA…

保存的地方不同 ,Cookie 保存在客戶端,Session 保存在服務端;

有效期不同 ,Cookie 可以存儲很長時間,Session 只能存在於一次會話中,瀏覽器關閉之後 Session 就失效了;

安全性不同 ,Cookie 存儲在客戶端容易被盜取或者利用,Session 在服務端比較安全;

存儲大小不同 ,單個 Cookie 能存儲 4K 的數據,Session 存儲量比 Cookie 高得多;

存取方式不同 ,Cookie 中只能保存  ASCII 字元串 ,假如需求存取 Unicode 字元或者二進位數據,需求先進行編碼。Session 中能夠存取 任何類型 的數據;

伺服器壓力不同 ,Session 是存儲在服務端的,巨大並發的時候會使伺服器資源急速飆升。Cookie 則不存在此問題;

鏈接:

如何使cookie全站都生效

以 setcookie(‘name’, “Garen”);echo $_COOKIE[‘name’];為例;第一次訪問在執行setcookie(‘name’,”Garen”);之前,PHP已經從請求體重獲取所有的cookie(在$_COOKIE中),然後到setcookie(‘name’,”Garen”);的時候,只是設置了名為name的cookie;這部只是保存進瀏覽器,但是並沒有賦值給$_COOKIE,$_COOKIE並沒有變化,所有也就沒有$_COOKIE[‘name’],執行到echo$_COOKIE[‘name’];就會報錯.第2次訪問獲取瀏覽器中所有的cookie時,已經有了上次添加的這個名為name的cookie了,所以可以顯示

cookie刷新才能生效

永遠記住,對COOKIE的賦值只有等下一次瀏覽請求時才能生效。如果想達到你那樣的功能請用變數來實現。我給出php的示例代碼:

$val_cookie=”xx”;

function fun1()

{

setcookie(“c_1”,$val_cookie,time()+3600);//設置下標名為c_1的cookie

$val_cookie;//若此時就要用剛剛賦進cookie的值,請用這個變數

}

function fun2()

{

$val_cookie;//和上邊一樣

}

如何設置cookie的有效期

你是用戶還是開發者啊 要是用戶不想使用自動登錄就把瀏覽器的安全級別設置成最高 保證會讓你很滿足 一天登錄n次你就會享受輸n次密碼的快感。

如果是開發者那就可以兩種方式設置cookie有效期了:javascript設置和伺服器腳本語言設置(有php或者java或者asp或者.NET)

js是這樣設置的:

function zxmcook(name,value,time){ //函數名字自己隨意定義,zxm是哥哥我名字,你就不要鬱悶了

var exp=new Date();

exp.setTime(exp.getTime()+time*60*24*60*1000); //這裡的time就是天數

document.cookie=name+”=”+escape(value)+”;expires=”+exp.toGMTString();

}

zxmcook(“mn”,”zxm”,1)//這就是一天

ok就這樣了 累死我了

然後php或者java或者asp或者.NET就不說了 並且每個人只會選擇一種的,哥不願意說了半天咱兩跑偏了 我搞的是php,結果你是java那樣多尷尬啊,不過我怎麼現在感覺怪怪的,你如果是開發者不會為了搞清楚個cookie跑這兒問半天,網上一搜就是一片,所以我預感咱兩百分之90都跑偏了

javascript 寫cookie立即生效問題

應該說這個是一個很奇怪的問題,看樓主的描述我也沒明白什麼原因

但是可以做這樣的一些測試來定位問題

1. 是否是瀏覽器的問題

可以分別測試ie,firefox來判別是否是瀏覽器的問題

2. 判斷你的js設置cookie是否成功

你可以多些一些js腳本,在你設置完cookie後立馬讀取出來,看看設置是否生效了

3. 如果上面都沒有問題,再看看網路傳輸

在你輸入「其它網址」的時候用抓包工具如(firebug,httpwatch)查看那個請求,你可以再該請求的cookie段裡頭找,看看該請求是不是帶上了你設置的cookie

4. 如果這些都正確了

那你就確認一下你的asp程序讀取cookie的方法是否正確

我想樓主能夠按以上4個步驟來測試,應該是能夠把問題定位下來了

祝好運!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/259530.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 16:29
下一篇 2024-12-15 16:29

相關推薦

  • 解決docker-compose 容器時間和伺服器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與伺服器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • Python載入Cookie錯誤解決方法用法介紹

    本文將從多個方面詳細闡述Python載入Cookie錯誤的解決方法,希望能對讀者有所幫助。 一、Cookie錯誤常見原因 1、Cookie過期:當Cookie過期時,載入Cooki…

    編程 2025-04-29
  • Cookie是後端生成的嗎?

    是的,Cookie通常是由後端生成並發送給客戶端的。下面從多個方面詳細闡述這個問題。 一、什麼是Cookie? 我們先來簡單地了解一下什麼是Cookie。Cookie是一種保存在客…

    編程 2025-04-28
  • 想把你和時間藏起來

    如果你覺得時間過得太快,每天都過得太匆忙,那麼你是否曾經想過想把時間藏起來,慢慢享受每一個瞬間?在這篇文章中,我們將會從多個方面,詳細地闡述如何想把你和時間藏起來。 一、一些時間管…

    編程 2025-04-28
  • 計算斐波那契數列的時間複雜度解析

    斐波那契數列是一個數列,其中每個數都是前兩個數的和,第一個數和第二個數都是1。斐波那契數列的前幾項為:1,1,2,3,5,8,13,21,34,…。計算斐波那契數列常用…

    編程 2025-04-28
  • 時間戳秒級可以用int嗎

    時間戳是指從某個固定的時間點開始計算的已經過去的時間。在計算機領域,時間戳通常使用秒級或毫秒級來表示。在實際使用中,我們經常會遇到需要將時間戳轉換為整數類型的情況。那麼,時間戳秒級…

    編程 2025-04-28
  • 如何在ACM競賽中優化開發時間

    ACM競賽旨在提高程序員的演算法能力和解決問題的實力,然而在比賽中優化開發時間同樣至關重要。 一、規劃賽前準備 1、提前熟悉比賽規則和題目類型,了解常見演算法、數據結構和快速編寫代碼的…

    編程 2025-04-28
  • 使用JavaScript日期函數掌握時間

    在本文中,我們將深入探討JavaScript日期函數,並且從多個視角介紹其應用方法和重要性。 一、日期的基本表示與獲取 在JavaScript中,使用Date對象來表示日期和時間,…

    編程 2025-04-28
  • Java Date時間大小比較

    本文將從多個角度詳細闡述Java中Date時間大小的比較,包含了時間字元串轉換、日期相減、使用Calendar比較、使用compareTo方法比較等多個方面。相信這篇文章能夠對你解…

    編程 2025-04-27
  • 二分查找時間複雜度為什麼是logN – 知乎

    二分查找是一種常用的查找演算法。它通過將目標值與數組的中間元素進行比較,從而將查找範圍縮小一半,直到找到目標值。這種方法的時間複雜度為O(logN)。下面我們將從多個方面探討為什麼二…

    編程 2025-04-27

發表回復

登錄後才能評論