Cookie与Session

Cookie

1.COOKIE机制

   1)Cookie的基本特点

     Cookie保存在客户端

     只能保存字符串对象,不能保存对象类型

     需要客户端浏览器的支持:客户端可以不支持,浏览器用户可能会禁用Cookie

   2)采用Cookie需要解决的问题

     Cookie的创建

       通常是在服务器端创建的(当然也可以通过javascript来创建)

       服务器通过在http的响应头加上特殊的指示,那么浏览器在读取这个指示后就会生成相应的cookie了

     Cookie存放的内容:业务信息("key","value")

       浏览器是如何通过Cookie和服务器通信?

       通过请求与响应,cookie在服务器和客户端之间传递

       每次请求和响应都把cookie信息加载到响应头中;依靠cookie的key传递。

2.jsp中的cookie中存放中文时候的问题 
jsp中的cookie中时不支持的中文的,所以在里面放入中文时首先要对中文内容进行编码,然后再放入, 而取出的时候也是先对其进行解码,然后在取出.
首先是建立cookie和编码的过程,在这一部中用到了一个包 java.net.URLEncoder具体代码如下:
    String text=URLEncoder.encode("第一个编写的cookie","utf-8"); //对中文内容进行编码,注意英文和字母不会进行编码    
      Cookie cook=new Cookie("aaa",text.toString());
      cook.setMaxAge(30*60);//规定cookie的存活时间
      response.addCookie(cook);//将建立的cookie对象放入到response中在之后可以被request获取。

 获取cookie的过程 ,在这个过程中用到了一个包 java.net.URLDecoder 具体的实现代码如下:     

    Cookie [] cookie=request.getCookies();//获取所有的cookie

      for(Cookie cok:cookies){
        String content=URLDecoder.decode(cok.getValue());//对得到的coolie中的值进行解码
        out.println(content);//输出编码后的cookie的内容
        out.println(request.getName());//输出得到的cookie的名字

       }

* cookie的value可以设置多少个字符:4kb

Session

服务器在服务器端创建一个内存区域,用来存放当前用户的所有信息,通过cookie关联(前提:必须使用cookie)

   每次客户端发送请求,服务断都检查是否含有JSessionId。

   如果有,则根据sessionId检索出session并处理;如果没有,则创建一个session,并绑定一个不重复的sessionId。

1)基本特点

u  状态信息保存在服务器端。这意味着安全性更高

u  通过类似与Hashtable的数据结构来保存 //?

u  能支持任何类型的对象(session中可含有多个对象) //?

2)保存会话id的技术

     Cookie

        这是默认的方式,在客户端与服务器端传递JSeesionId

        缺点:客户端可能禁用Cookie(可以用到TagLib代替此缺点?)

     表单隐藏字段

        在被传递回客户端之前,在 form 里面加入一个hidden域,设置JSeesionId:

        <input type=hidden name=jsessionid value="3948E432F90932A549D34532EE2394" />

     URL重写

        直接在URL后附加上session id的信息

posted @ 2014-03-14 20:32  烫烫烫烫  阅读(208)  评论(0编辑  收藏  举报