Servlet第七篇【Cookie和Session的區別、應用】

Session和Cookie的區別

  • 從存儲方式上比較數據庫

    • Cookie只能存儲字符串,若是要存儲非ASCII字符串還要對其編碼。
    • Session能夠存儲任何類型的數據,能夠把Session當作是一個容器
  • 從隱私安全上比較跨域

    • Cookie存儲在瀏覽器中,對客戶端是可見的。信息容易泄露出去。若是使用Cookie,最好將Cookie加密
    • Session存儲在服務器上,對客戶端是透明的。不存在敏感信息泄露問題。
  • 從有效期上比較瀏覽器

    • Cookie保存在硬盤中,只須要設置maxAge屬性爲比較大的正整數,即便關閉瀏覽器,Cookie仍是存在的
    • Session的保存在服務器中,設置maxInactiveInterval屬性值來肯定Session的有效期。而且Session依賴於名爲JSESSIONID的Cookie,該Cookie默認的maxAge屬性爲-1。若是關閉了瀏覽器,該Session雖然沒有從服務器中消亡,但也就失效了。
  • 從對服務器的負擔比較安全

    • Session是保存在服務器的,每一個用戶都會產生一個Session,若是是併發訪問的用戶很是多,是不能使用Session的,Session會消耗大量的內存。
    • Cookie是保存在客戶端的。不佔用服務器的資源。像baidu、Sina這樣的大型網站,通常都是使用Cookie來進行會話跟蹤。
  • 從瀏覽器的支持上比較服務器

    • 若是瀏覽器禁用了Cookie,那麼Cookie是無用的了!
    • 若是瀏覽器禁用了Cookie,Session能夠經過URL地址重寫來進行會話跟蹤。
  • 從跨域名上比較markdown

    • Cookie能夠設置domain屬性來實現跨域名
    • Session只在當前的域名內有效,不可誇域名

Cookie和Session共同使用

  • 若是僅僅使用Cookie或僅僅使用Session可能達不到理想的效果。這時應該嘗試一下同時使用Session和Cookiecookie

  • 那麼,何時才須要同時使用Cookie和Session呢?session

  • 在上一篇博客中,咱們使用了Session來進行簡單的購物,功能也的確實現了。如今有一個問題:我在購物的途中,不當心關閉了瀏覽器。當我再返回進去瀏覽器的時候,發現我購買過的商品記錄都沒了!!爲何會沒了呢?緣由也很是簡單:服務器爲Session自動維護的Cookie的maxAge屬性默認是-1的,當瀏覽器關閉掉了,該Cookie就自動消亡了。當用戶再次訪問的時候,已經不是原來的Cookie了。
  • 咱們如今想的是:即便我不當心關閉了瀏覽器了,我從新進去網站,我還能找到個人購買記錄
  • 要實現該功能也十分簡單,問題其實就在:服務器爲Session自動維護的Cookie的maxAge屬性是-1,Cookie沒有保存在硬盤中。我如今要作的就是:把Cookie保存在硬盤中,即便我關閉了瀏覽器,瀏覽器再次訪問頁面的時候,能夠帶上Cookie,從而服務器識別出Session。併發

  • 第一種方式:只須要在處理購買頁面上建立Cookie,Cookie的值是Session的id返回給瀏覽器便可dom

Cookie cookie = new Cookie("JSESSIONID",session.getId());
        cookie.setMaxAge(30*60);
        cookie.setPath("/ouzicheng/");
        response.addCookie(cookie);
  • 第二種方式: 在server.xml文件中配置,將每一個用戶的Session在服務器關閉的時候序列化到硬盤或數據庫上保存。但此方法不經常使用,知道便可!

  • 下面看一下效果

相關文章
相關標籤/搜索