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

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

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

    yxhxj2006

    常用鏈接

    統計

    最新評論

    cookie與session的關系

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

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

    可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數組的長度也是1,而這個Cookie的名字就是JSESSIONID,還有一個很長的二進制的字符串,是SessionID的值。 
    Cookie是客戶端的存儲空間,由瀏覽器來維持。
     
    總結:
    1:cookie是通過頭部header返回到瀏覽器中并保存在磁盤中,下次再次訪問該服務器中。瀏覽器會自動把該cookie傳輸到服務器中。
    2:Session與Cookie是一對的,Session使用的基礎就是cookie。
    3:cookie分為兩種,如果設置cookie時沒有設置有效時間,就表示該cookie是臨時性的,只保存在瀏覽器的內存中,即seesion-cookie,只要關閉瀏覽器,該cookie即將消失。
                              如果cookie設置了有效時間,就表示該cookie是持久化的,即persistent cookie。此外還可以為持久化cookie設置域名和路徑。
    4:當禁止cookie后,就返回通過url地址返回cookie Id。
    5:如來是否自定義cookie值,服務器都會自動產生一個cookie值,名稱為:
    JSESSIONID,而值就是服務器中的sessionid值。

    創建cookie的步驟: 以java為例:
     1: 創建cookie對象:Cookie cookie = new Cookie("cookiename","cookievalue"); 
     2:設置有效期:cookie.setMaxAge(3600); 
     3:設置路徑:cookie.setPath("/"); //設置路徑,這個路徑即該工程下都可以訪問該cookie 如果不設置路徑,那么只有設置該cookie路徑及其子路徑可以訪問 
     4:設置域名:cookie.setDomain(".zl.org") ;  //域名要以“.”開頭 
     5:在返回對象中添加cookie對象:response.addCookie(cookie) ; 
     6:返回對象response其他的操作。

    以下為Java操作Cookie實例:
    java對cookie的操作比較簡單,主要介紹下建立cookie和讀取cookie,以及如何設定cookie的生命周期和cookie的路徑問題。

    建立一個無生命周期的cookie,即隨著瀏覽器的關閉即消失的cookie,代碼如下

    HttpServletRequest request  
    HttpServletResponse response
    Cookie cookie = new Cookie("cookiename","cookievalue");
    response.addCookie(cookie);
     
    下面建立一個有生命周期的cookie,可以設置他的生命周期

    cookie = new Cookie("cookiename","cookievalue");
     
    cookie.setMaxAge(3600);
     
    //設置路徑,這個路徑即該工程下都可以訪問該cookie 如果不設置路徑,那么只有設置該cookie路徑及其子路徑可以訪問
     
    cookie.setPath("/");
    response.addCookie(cookie);
     

    下面介紹如何讀取cookie,讀取cookie代碼如下

    Cookie[] cookies = request.getCookies();//這樣便可以獲取一個cookie數組
    for(Cookie cookie : cookies){
        cookie.getName();// get the cookie name
        cookie.getValue(); // get the cookie value
    }
     

    上面就是基本的讀寫cookie的操作。我們在實際中最好進行一下封裝,比如增加一個cookie,我們關注的是cookie的name,value,生命周期,所以進行封裝一個函數,當然還要傳入一個response對象,addCookie()代碼如下

    /**
     * 設置cookie
     * 
    @param response
     * 
    @param name  cookie名字
     * 
    @param value cookie值
     * 
    @param maxAge cookie生命周期  以秒為單位
     
    */
    public static void addCookie(HttpServletResponse response,String name,String value,int maxAge){
        Cookie cookie = new Cookie(name,value);
        cookie.setPath("/");
        if(maxAge>0)  cookie.setMaxAge(maxAge);
        response.addCookie(cookie);
    }
     

    讀取cookie的時候,為了方便我們的操作,我們希望封裝一個函數,只要我們提供cookie的name,我們便可以獲取cookie的value,帶著這個想法,很容易想到將cookie封裝到Map里面,于是進行下面的封裝.
    /**
     * 根據名字獲取cookie
     * 
    @param request
     * 
    @param name cookie名字
     * 
    @return
     
    */
    public static Cookie getCookieByName(HttpServletRequest request,String name){
        Map<String,Cookie> cookieMap = ReadCookieMap(request);
        if(cookieMap.containsKey(name)){
            Cookie cookie = (Cookie)cookieMap.get(name);
            return cookie;
        }else{
            return null;
        }   
    }
      
    /**
     * 將cookie封裝到Map里面
     * 
    @param request
     * 
    @return
     
    */
    private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){  
        Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
        Cookie[] cookies = request.getCookies();
        if(null!=cookies){
            for(Cookie cookie : cookies){
                cookieMap.put(cookie.getName(), cookie);
            }
        }
        return cookieMap;
    }

    posted on 2013-11-26 00:01 奮斗成就男人 閱讀(176) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 91短视频在线免费观看| 日韩在线观看免费完整版视频| 无码专区AAAAAA免费视频| 亚洲日韩激情无码一区| 中文字幕无线码中文字幕免费| 亚洲区小说区图片区| 国精产品一区一区三区免费视频| 国产午夜亚洲精品午夜鲁丝片| 成人毛片100免费观看| 亚洲欧洲国产精品香蕉网| 永久免费av无码入口国语片| 亚洲AV无码国产丝袜在线观看| 久久国产精品成人免费| 亚洲酒色1314狠狠做| 67194熟妇在线永久免费观看| 久久精品国产亚洲av麻豆图片| 女人被免费视频网站| 国产成人综合亚洲一区| 丁香五月亚洲综合深深爱| 香港a毛片免费观看 | 人人爽人人爽人人片av免费 | 免费a级毛片无码av| 国产精品1024在线永久免费 | 亚洲一区免费观看| 免费精品国产日韩热久久| 亚洲国产欧洲综合997久久| 亚洲不卡AV影片在线播放| 成全视频高清免费观看电视剧| 亚洲无限乱码一二三四区| 免费无码黄动漫在线观看| 久久久久久毛片免费看| 亚洲欧洲日本天天堂在线观看| 国产精品免费电影| 日韩免费在线视频| 亚洲乱亚洲乱妇24p| 中文字幕亚洲无线码| 69式互添免费视频| 一级女人18片毛片免费视频| 亚洲色图校园春色| 亚洲av再在线观看| 最近中文字幕高清免费中文字幕mv|