<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    feitian

    Cookie 和session 的區(qū)別 (轉(zhuǎn)自http://www.cnblogs.com/chy8219/articles/1223533.html)

    session與cookie的區(qū)別(轉(zhuǎn)自http://www.cnblogs.com/chy8219/articles/1223533.html
    Session是由應用服務器維持的一個服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的SessionID,用該SessionID 為標識符來存取服務器端的Session存儲空間。而SessionID這一數(shù)據(jù)則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到服務器端,來存取Session數(shù)據(jù)。這一過程,是不用開發(fā)人員干預的。所以一旦客戶端禁用Cookie,那么Session也會失效。

    服務器也可以通過URL重寫的方式來傳遞SessionID的值,因此不是完全依賴Cookie。如果客戶端Cookie禁用,則服務器可以自動通過重寫URL的方式來保存Session的值,并且這個過程對程序員透明。

    可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數(shù)組的長度也是1,而這個Cookie的名字就是JSESSIONID
    ,還有一個很長的二進制的字符串,是SessionID的值。

    Cookie是客戶端的存儲空間,由瀏覽器來維持。

    在一些投票之類的場合,我們往往因為公平的原則要求每人只能投一票,在一些WEB開發(fā)中也有類似的情況,這時候我們通常會使用COOKIE來實現(xiàn),例如如下的代碼:
    < % cookie[]cookies = request.getCookies();
    if (cookies.lenght == 0 || cookies == null)
       doStuffForNewbie();
    //沒有訪問過   
    }

    else
    {
       doStuffForReturnVisitor(); //已經(jīng)訪問過了
    }

    % >



           這是很淺顯易懂的道理,檢測COOKIE的存在,如果存在說明已經(jīng)運行過寫入COOKIE的代碼了,然而運行以上的代碼后,無論何時結(jié)果都是執(zhí)行doStuffForReturnVisitor(),通過控制面板-Internet選項-設置-察看文件卻始終看不到生成的cookie文件,奇怪,代碼明明沒有問題,不過既然有cookie,那就顯示出來看看。
    cookie[]cookies = request.getCookies();
    if (cookies.lenght == 0 || cookies == null)
       out.println("Has not visited this website");
    }

    else
    {
       for (int i = 0; i < cookie.length; i++)
       {
         out.println("cookie name:" + cookies[i].getName() + "cookie value:" +
             cookie[i].getValue());
       }
    }


             運行結(jié)果:
    cookie name:JSESSIONID cookie value:KWJHUG6JJM65HS2K6

    為什么會有cookie呢,大家都知道,http是無狀態(tài)的協(xié)議,客戶每次讀取web頁面時,服務器都打開新的會話,而且服務器也不會自動維護客戶的上下文信息,那么要怎么才能實現(xiàn)網(wǎng)上商店中的購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變量的值保存在服務器端,通過SessionID來區(qū)分不同的客戶,session是以cookie或URL重寫為基礎(chǔ)的,默認使用cookie來實現(xiàn),系統(tǒng)會創(chuàng)造一個名為JSESSIONID的輸出cookie,我們叫做session cookie,以區(qū)別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲于瀏覽器內(nèi)存中的,并不是寫到硬盤上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當我們把瀏覽器的cookie禁止后,web服務器會采用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到sessionid=KWJHUG6JJM65HS2K6之類的字符串。
             明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區(qū)別了,網(wǎng)上那些關(guān)于兩者安全性的討論也就一目了然了,session cookie針對某一次會話而言,會話結(jié)束session cookie也就隨著消失了,而persistent cookie只是存在于客戶端硬盤上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如session cookie安全了。
             通常session cookie是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統(tǒng)會賦予你一個新的sessionid,這樣我們信息共享的目的就達不到了,此時我們可以先把sessionid保存在persistent cookie中,然后在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent cookie的結(jié)合我們就實現(xiàn)了跨窗口的session tracking(會話跟蹤)。
             在一些web開發(fā)的書中,往往只是簡單的把Session和cookie作為兩種并列的http傳送信息的方式,session cookies位于服務器端,persistent cookie位于客戶端,可是session又是以cookie為基礎(chǔ)的,明白的兩者之間的聯(lián)系和區(qū)別,我們就不難選擇合適的技術(shù)來開發(fā)web service了。

    posted on 2011-05-12 19:38 飛天wfu 閱讀(357) 評論(0)  編輯  收藏 所屬分類: Java EE 學習

    主站蜘蛛池模板: 成人免费看黄20分钟| 98精品全国免费观看视频| 女人18毛片a级毛片免费视频| 亚洲精品国产成人99久久| 日韩电影免费在线观看| 亚洲AV永久无码区成人网站| 全黄大全大色全免费大片| 久久被窝电影亚洲爽爽爽| 在线成人精品国产区免费| 久久亚洲国产精品| 67194成手机免费观看| 亚洲综合激情视频| 国产情侣激情在线视频免费看 | 一本色道久久综合亚洲精品| 五月婷婷免费视频| 最新国产AV无码专区亚洲| 两个人看的www免费视频| 亚洲国产成人久久精品动漫| 成人在线免费看片| 亚洲欧美日韩国产精品一区| 国产精品久久香蕉免费播放| 七次郎成人免费线路视频| 亚洲热线99精品视频| 最近中文字幕高清免费中文字幕mv| 亚洲高清视频免费| 暖暖免费高清日本中文| 一级做a爰片久久毛片免费陪| 亚洲国产精品无码AAA片| 日韩视频在线精品视频免费观看| 亚洲精品无码少妇30P| 亚洲中文字幕视频国产| 免费看的一级毛片| 免费无码又爽又黄又刺激网站| 亚洲毛片αv无线播放一区| 免费精品国产日韩热久久| 亚洲AV无码AV日韩AV网站| 中文字幕精品亚洲无线码一区| 亚洲一级免费毛片| 美女啪啪网站又黄又免费| 亚洲色无码专区在线观看| 西西大胆无码视频免费|