cookie的使用

我們主要關(guān)注的是cookie的特性婆排,以及如何使用声旺。所以,先不講枯燥的理論知識(shí)段只,相信這些理論大家從網(wǎng)上隨隨便便就能找到很多篇腮猖,我們只總結(jié)最正確的使用方式。

屬性

  • key

    cookie名稱(chēng)

  • value

    cookie的值

    有一點(diǎn)需要注意的是赞枕,因?yàn)閏ookie的value是一個(gè)字符串澈缺,有可能會(huì)包含設(shè)置cookie的特殊字符,比如【逗號(hào)炕婶、分號(hào)姐赡、空格】等,所以我們要對(duì)value值進(jìn)行編碼處理柠掂,利用escape編碼项滑,取值時(shí)用unescape解碼。

  • domain

    cookie所在域涯贞。

    • 如果一個(gè)cookie顯示設(shè)置domain枪狂,那么該domain下或該domain下所有子域網(wǎng)頁(yè)都可以訪問(wèn)到這個(gè)cookie。例如當(dāng)前有一個(gè)網(wǎng)頁(yè)http://a.shifei.com/a.html ,在這個(gè)網(wǎng)頁(yè)上執(zhí)行腳本宋渔。
    document.cookie="name=shifei;domain=.shifei.com";
    
    • 沒(méi)有顯示設(shè)置domain時(shí)州疾,默認(rèn)為當(dāng)前網(wǎng)頁(yè)的host。
  • max-age

    cookie有效期 皇拣,以秒為單位 严蓖。

    max-age屬性用來(lái)代替舊的屬性expires,如果瀏覽器支持max-age氧急,那么優(yōu)先使用max-age設(shè)置的過(guò)期時(shí)間颗胡,否則,仍然使用expires作為過(guò)期時(shí)間态蒂。

    兩種場(chǎng)景:

    1.max-age設(shè)置為正數(shù)時(shí)

    cookie從創(chuàng)建那一刻開(kāi)始存活杭措,max-age秒之后被刪除费什。

    2.設(shè)置為0或者負(fù)數(shù)時(shí)

    如果當(dāng)前瀏覽器里有同名cookie钾恢,則刪除該cookie手素。

    如果該瀏覽器里沒(méi)有同名cookie,則不創(chuàng)建瘩蚪。

  • expires

    cookie的過(guò)期時(shí)間泉懦,用GMT或者UTC時(shí)間格式來(lái)表示

    cookie從創(chuàng)建之初到expires設(shè)置的時(shí)間內(nèi)是存活期疹瘦,如果當(dāng)前時(shí)間大于expires設(shè)置的時(shí)間崩哩,則該cookie被刪除。

  • path

    該屬性設(shè)置cookie允許被哪些目錄訪問(wèn)言沐。

    如當(dāng)前網(wǎng)頁(yè)為http://a.shifei.com/news/a.html邓嘹。

    • 顯示設(shè)置
    documen.cookie="name=shifei;path=/";
    

    表示a.shifei.com域下的/目錄下的所有網(wǎng)頁(yè)都能訪問(wèn)到該cookie

    • 默認(rèn)設(shè)置

      默認(rèn)設(shè)置的話,path取當(dāng)前目錄/news 险胰。

      document.cookie="name=shifei;"
      
  • httpOnly

    該屬性設(shè)置cookie是否可以通過(guò)javascript代碼來(lái)進(jìn)行訪問(wèn) 汹押。

    js是無(wú)法設(shè)置該屬性的,只能是服務(wù)端進(jìn)行設(shè)置起便。

    該屬性目的是為了防止cookie在傳輸過(guò)程中被篡改棚贾,提高網(wǎng)頁(yè)安全性。

  • secure

    設(shè)置cookie只在確保安全的請(qǐng)求中傳送榆综。

    當(dāng)請(qǐng)求是HTTPS 或者其他的安全協(xié)議時(shí)妙痹,帶有secure屬性的cookie才 能被發(fā)送到服務(wù)器。

    默認(rèn)情況鼻疮,cookie不會(huì)帶有secure屬性怯伊,所以,如果沒(méi)有顯示設(shè)置secure屬性的cookie判沟,在HTTPSHTTP 協(xié)議下震贵,都會(huì)被發(fā)送到服務(wù)端。

    有一點(diǎn)需要說(shuō)明水评,帶有secure的cookie猩系,只是在安全協(xié)議下才能被發(fā)送到服務(wù)端,但是中燥,我們?nèi)匀豢梢酝ㄟ^(guò)瀏覽器查看到該cookie的寇甸。

設(shè)置

假設(shè)當(dāng)前網(wǎng)頁(yè)是 http://www.shifei.com/news/a.html

  1. 設(shè)置cookie

    通過(guò)下面這種方式設(shè)置完之后,瀏覽器會(huì)創(chuàng)建一個(gè)名為taizi的cookie疗涉,domain為www.shifei.com拿霉,注意這個(gè)domain不帶點(diǎn)。path為/news,

    有效期是session會(huì)話期咱扣,瀏覽器關(guān)閉即失效绽淘。

document.cookie="taizi=yehua;"
  1. 設(shè)置cookie在60秒后消失

    設(shè)置過(guò)期時(shí)間有兩個(gè)屬性可以選擇,一是<font color=red>expires</font>闹伪,二是<font color=red>max-age</font>沪铭。

    使用expires設(shè)置時(shí)壮池,必須以GMT或者UTC格式的時(shí)間來(lái)表示,否則有效期設(shè)置失敗杀怠,將會(huì)取瀏覽器默認(rèn)設(shè)置session椰憋。

    document.cookie="taizi=yehua;max-age=10";
    //或者
    var currDate=new Date();
    //將currDate設(shè)置為當(dāng)前時(shí)間之后的60秒
    currDate.setTime(currDate.getTime()+60*1000);
    document.cookie="taizi=yehua;expires="+currDate.toGMTString();
    
  2. 設(shè)置cookie的domain為頂級(jí)域

    document.cookie="taizi=yehua;domain=.shifei.com";
    
  3. 設(shè)置cookie在頂級(jí)域的任何目錄都可以訪問(wèn)

    document.cookie="taizi=yehua;domain=.shifei.com;path=/";
    
  4. 刪除cookie

    將max-age設(shè)置為零或者負(fù)數(shù),即可將cookie刪除赔退。

    或者將expires設(shè)置成比當(dāng)前時(shí)間早的值橙依。

    document.cookie="taizi=yehua;max-age=0";
    //或者
    document.cookie="taizi=yehua;max-age=-1";
    

注意

  • 設(shè)置domain時(shí)為什么有的以點(diǎn)開(kāi)頭,有的則不是硕旗。

    設(shè)置domain時(shí)窗骑,以點(diǎn)開(kāi)頭的話,那么cookie的有效域只有設(shè)置的domain有效漆枚,哪怕該domain下的子域名也訪問(wèn)不到該cookie慧域。

  • 如何設(shè)置多個(gè)cookie

    通過(guò)document.cookie="";這種方式,每調(diào)用一次浪读,只能設(shè)置一個(gè)cookie昔榴,若想設(shè)置多個(gè)cookie,則需要調(diào)用多次碘橘。

  • cookie是否可以同名互订?

    cookie可以同名,但是domain或者path不能完全相同,也就是說(shuō)同名的cookie痘拆,只要domain或者path有一個(gè)不同仰禽,那么,都可以共存纺蛆。

    舉個(gè)例子來(lái)說(shuō)

    document.cookie="name=shifei;domain=.shifei.com"
    document.cookie="name=shifei;domain=mrd.shifei.com"
    

    通過(guò)這兩種方式設(shè)置完吐葵,瀏覽器將會(huì)創(chuàng)建兩個(gè)cookie,我們可以看到這兩個(gè)cookie是同名的桥氏,但是因?yàn)閐omain不同温峭,所以瀏覽器不會(huì)只保留一個(gè)cookie。

  • cookie的使用有哪些限制字支? (題目雖然簡(jiǎn)單凤藏,大家未必會(huì)在意。)

    1. 單個(gè)域名的所有cookie的大小不能超過(guò)4KB堕伪,最后設(shè)置的cookie如果超過(guò)4KB限制揖庄,設(shè)置會(huì)失敗。
    2. 單個(gè)域名cookie數(shù)量最多50個(gè)欠雌,safari和chrome沒(méi)有數(shù)量限制前痘。
    3. cookie數(shù)量越多港粱,體積越大福青,便會(huì)影響服務(wù)器傳輸效率,所以要慎用cookie而咆,只把必須要帶給服務(wù)器的數(shù)據(jù)設(shè)置到cookie中。
    4. 默認(rèn)情況下齐苛,cookie不能跨域傳輸翘盖,但是通過(guò)下面兩部操作桂塞,可以實(shí)現(xiàn)跨域傳輸凹蜂。
      • 瀏覽器設(shè)置xhr.withCredentials=true。
      • 服務(wù)端設(shè)置響應(yīng)頭Access-Control-Allow-Credentials:true

cookie的使用大致如此了阁危,利用cookie玛痊,可以實(shí)現(xiàn)單點(diǎn)登錄,稍后我整理一個(gè)單點(diǎn)登錄的demo狂打,放到github擂煞,大家如果有想要源碼進(jìn)行學(xué)習(xí)的可以找我要一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趴乡,一起剝皮案震驚了整個(gè)濱河市对省,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晾捏,老刑警劉巖蒿涎,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惦辛,居然都是意外死亡劳秋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)胖齐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)玻淑,“玉大人,你說(shuō)我怎么就攤上這事呀伙〔孤模” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵剿另,是天一觀的道長(zhǎng)干像。 經(jīng)常有香客問(wèn)我,道長(zhǎng)驰弄,這世上最難降的妖魔是什么麻汰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮戚篙,結(jié)果婚禮上五鲫,老公的妹妹穿的比我還像新娘。我一直安慰自己岔擂,他們只是感情好位喂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布浪耘。 她就那樣靜靜地躺著,像睡著了一般塑崖。 火紅的嫁衣襯著肌膚如雪七冲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天规婆,我揣著相機(jī)與錄音澜躺,去河邊找鬼。 笑死抒蚜,一個(gè)胖子當(dāng)著我的面吹牛掘鄙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嗡髓,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼操漠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了饿这?” 一聲冷哼從身側(cè)響起浊伙,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎长捧,沒(méi)想到半個(gè)月后嚣鄙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唆姐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拗慨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奉芦。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赵抢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出声功,到底是詐尸還是另有隱情烦却,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布先巴,位于F島的核電站其爵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伸蚯。R本人自食惡果不足惜摩渺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剂邮。 院中可真熱鬧摇幻,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至狂芋,卻和暖如春榨馁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帜矾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工翼虫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人黍特。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓蛙讥,卻偏偏與公主長(zhǎng)得像锯蛀,于是被迫代替她去往敵國(guó)和親灭衷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • JavaScript是運(yùn)行在客戶端的腳本旁涤,一般是不能夠直接設(shè)置Session的翔曲,因?yàn)镾ession是運(yùn)行在服務(wù)器端...
    hh_王小米閱讀 1,503評(píng)論 2 0
  • HTTP cookie(也稱(chēng)為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡(jiǎn)稱(chēng)cookie)是網(wǎng)...
    留七七閱讀 17,968評(píng)論 2 71
  • 作者:晚晴幽草軒www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饑人谷_Dylan閱讀 1,224評(píng)論 0 51
  • 背景在HTTP協(xié)議的定義中,采用了一種機(jī)制來(lái)記錄客戶端和服務(wù)器端交互的信息劈愚,這種機(jī)制被稱(chēng)為cookie瞳遍,cooki...
    時(shí)芥藍(lán)閱讀 2,365評(píng)論 1 17
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)菌羽,斷路器掠械,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139