Java下的Cookie和Session

来源:互联网 发布:nba2k17麦迪身体数据 编辑:程序博客网 时间:2024/06/05 02:31
  1. Session是一种服务器端技术, Session 对象在服务器端创建,通常采用散列表来存储信息,例如, Tomcat 的 Session 实现采用 HashMap 对象来存储属性名和属性值。
  2. Cookie是由 Netscape 公司发明的、用于跟踪用户会话的一种方式。 Cookie 是由服务器发送给客户的片段信息,存储在客户端浏览器的内存中或硬盘上,在客户随后对该服务器的请求中发回它。
  3. Cookie小结
    1) Cookie在服务端创建
Cookie cookie = new Cookie(name,value);

2) Cookie保存在浏览器端

response.addCookie(cookie);

3) Cookie的生命周期和上传路径均可指定。

Cookie cookie = new Cookie("mykey", "myvalue");//新建cookiecookie.setMaxAge(60 * 60 * 24);//设置cookie的生命周期是一天cookie.setPath(req.getContextPath() + "/cookie.action");//只有在访问/cookie.action时才会上传resp.addCookie(cookie);//添加cookie

4) Cookie可以被多个浏览器共享
5) 一个web应用可以保存多个cookie(放置在同一个文件内部) ,最多不要超过20个,每个Cookie的大小限制为4kB,因此Cookie不会塞满你的硬盘更不会被作为”拒绝服务”的攻击手段。浏览器一般保存的Cookie不会超过300个
6) Cookie存放中文,出现的乱码问题

//存放String val = java.net.URLEncoder.encode("中文名称","utf-8");Cookie cookie = new Cookie("name","val");//读出String val = java.net.URLDecoder.decode(cookie.getValue("name"),"utf-8");out.println("name="+val)
  1. session小结:
    1) Session是存放在服务器的内存
HttpSession session = req.getSession();

2) 一个用户浏览器,独享一个session域对象
3) Session中的属性的默认生命周期是30min,可以通过web.xml和setMaxInactiveInterval()来修改
4) Session中可以存放多个属性(包括对象)
5) 如果session.setAttribute(name,value);name相同,则会替换掉。

  1. Session 对比 Cookie :
    1) 存储位置不同: Cookie存在在客户端(临时文件夹,不限时间的存储在内存) Session存在服务器内存中,一个session域对象为一个用户浏览器服务
    2) 安全性: Cookie以明文方式存放在客户端,安全较弱,可以通过MD5加密算法再存放 Session存放在服务器端内存中,所以安全性较好
    3) 网络传输量: Cookie会传递信息给服务器 Session的属性值不会给客户端
    4) 生命周期: Cookie的声明周期是累计时间 Session的生命周期是访问session的间隔时间,在一些情况下session也会失效,例如:关闭tomcat,reload web应用,时间到,调用invalidate()[安全退出]
    5) 从访问范围 :Session为一个浏览器独享 Cookie为多个用户浏览器共享 因为session会占用服务器的内存,因此不要向session存放过多、过大的对象,会影响性能。
0 0
原创粉丝点击