feitian

          2011年4月24日 #

          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是由應(yīng)用服務(wù)器維持的一個(gè)服務(wù)器端的存儲(chǔ)空間,用戶在連接服務(wù)器時(shí),會(huì)由服務(wù)器生成一個(gè)唯一的SessionID,用該SessionID 為標(biāo)識(shí)符來存取服務(wù)器端的Session存儲(chǔ)空間。而SessionID這一數(shù)據(jù)則是保存到客戶端,用Cookie保存的,用戶提交頁面時(shí),會(huì)將這一 SessionID提交到服務(wù)器端,來存取Session數(shù)據(jù)。這一過程,是不用開發(fā)人員干預(yù)的。所以一旦客戶端禁用Cookie,那么Session也會(huì)失效。

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

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

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

          在一些投票之類的場(chǎng)合,我們往往因?yàn)楣降脑瓌t要求每人只能投一票,在一些WEB開發(fā)中也有類似的情況,這時(shí)候我們通常會(huì)使用COOKIE來實(shí)現(xiàn),例如如下的代碼:
          < % cookie[]cookies = request.getCookies();
          if (cookies.lenght == 0 || cookies == null)
             doStuffForNewbie();
          //沒有訪問過   
          }

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

          % >



                 這是很淺顯易懂的道理,檢測(cè)COOKIE的存在,如果存在說明已經(jīng)運(yùn)行過寫入COOKIE的代碼了,然而運(yùn)行以上的代碼后,無論何時(shí)結(jié)果都是執(zhí)行doStuffForReturnVisitor(),通過控制面板-Internet選項(xiàng)-設(shè)置-察看文件卻始終看不到生成的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());
             }
          }


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

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

          posted @ 2011-05-12 19:38 飛天wfu 閱讀(360) | 評(píng)論 (0)編輯 收藏

          mysql數(shù)據(jù)庫中插入中文錯(cuò)誤

          往mysql數(shù)據(jù)庫中插入中文時(shí)顯示錯(cuò)誤,是數(shù)據(jù)庫的字符集問題。
                將mysql默認(rèn)字符集設(shè)置為utf8  ,
                然后修改mysql安裝目錄下的my.ini文件:
                       [client]下的default-character-set=gbk;
                       [mysqld]下的default-character-set=utf8;
                重啟mysql服務(wù),問題解決!

          posted @ 2011-04-24 12:08 飛天wfu 閱讀(163) | 評(píng)論 (0)編輯 收藏

          各種排序算法java實(shí)現(xiàn) (轉(zhuǎn)自http://duketian.blog.chinajavaworld.com/entry/3852/0/)

               摘要:   1 package org.rut.util.algorithm.support;   2     3 import org.rut.util.algorithm.SortUtil;   4 /**   5 ...  閱讀全文

          posted @ 2011-04-24 12:04 飛天wfu 閱讀(216) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 久治县| 冕宁县| 即墨市| 惠东县| 长岛县| 石景山区| 安宁市| 乌兰浩特市| 区。| 台北县| 二连浩特市| 当涂县| 静安区| 庄河市| 白山市| 武强县| 苗栗县| 札达县| 钟山县| 郴州市| 辽中县| 元阳县| 渑池县| 鞍山市| 万源市| 安化县| 盱眙县| 连平县| 樟树市| 保山市| 延寿县| 武功县| 游戏| 孝昌县| 桑日县| 库尔勒市| 凤城市| 郁南县| 苍溪县| 昌宁县| 平凉市|