Cookie与Session小记

一 Cookie的作用

     我们知道,HTTP协议是一种无状态的通信,就是说,使用HTTP请求是无法保证连续访问的。浏览器每请求一次WEB服务器,WEB服务器都认为这是一次新的请求,它并不知道该浏览器前一次也访问过。例如网上购物我们浏览商品,我到一个页面买了一件商品,又到另外一个页面买了商品,那前一次访问的页面的商品就没有了?这是不合理的。

   COOKIE是一种可以解决上述问题的方法,当服务器觉得有必要记录你的状态的时候,它就会保存COOKIE;当浏览器访问WEB服务器时,它会把COOKIE发送给服务器,这样WEB服务器就知道曾经浏览器来过。

 

二 Cookie的具体形态

     COOKIE是以文本文件的方式保存在客户端的,不能是其他格式,例如将一个对象序列化成文件来保存是不行的。另外,COOKIE是明文的,流氓软件、黑客等等都可以窃取COOKIE信息,所以在保存相对重要的信息时最好进行加密。比如我们实现个性化首页定制、购物网站最近浏览过的商品等功能,都可以通过COOKIE来实现。

三 HttpServletRequest#getCookies()方法研究

四 关于Session

   COOKIE不同,SESSION是记录在服务器的内存当中的,这样用户就无法直接篡改服务器信息,而COOKIE存在客户端。SESSION以对象的形式来进行保存,因此SESSION保存的对象必须能够序列化。SESSION可以完成连续性信息的记录,比如实现用户登录权限等。

  SESSION究竟是怎样实现的?其底层实现方式有两种,URL重写和COOKIE实现。

  (1)URL重写。
  Web Server在返回Response的时候,检查页面中所有的URL,包括所有的连接,和HTML Form的Action属性,在这些URL后面加上“;jsessionid=XXX”。下一次,用户访问这个页面中的URL,jsessionid就会传回到Web Server。
  (2)Cookie。
  如果客户端支持Cookie,Web Server在返回Response的时候,在Response的Header部分,加入一个“set-cookie: jsessionid=XXXX”header属性,把jsessionid放在Cookie里传到客户端。 客户端会把Cookie存放在本地文件里,下一次访问Web Server的时候,再把Cookie的信息放到HTTP Request的“Cookie”header属性里面,这样jsessionid就随着HTTP Request返回给Web Server。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章