[关闭]
@duyao 2015-05-03T01:37:45.000000Z 字数 2790 阅读 3198

会话技术-cookie与session

servlet


会话

浏览器访问一个网站,只要不关闭该浏览器,不管该用户点击多少超链接,访问多少资源,直到用户关闭浏览器,整个的这个过程,称为一次会话。


服务器把用户数据写给各自的浏览器,以便下次使用

  1. //创建cookie
  2. Cookie cookie=new Cookie(name, value);
  3. //设置生命周期,以秒为单位
  4. cookie.setMaxAge(3600);
  5. //传送给浏览器
  6. response.addCookie(cookie);
  7. //读取cookie
  8. Cookie [] cookies=request.getCookies();
  9. //遍历cookie
  10. for(int i=0;i<cookies.length;i++){
  11. System.out.println("cookie名字"+cookies[i].getName());
  12. System.out.println("cookie值"+cookies[i].getValue());
  13. }

服务器创建

保存在浏览器端

生命周期

可以通过cookie.setMaxAge(int),单位是秒
+ cookie.setMaxAge(整数x)x秒后消亡
+ cookie.setMaxAge(0)删除该cookie,删除后还要回传response.addCookie(cookie);
+ cookie.setMaxAge(负数)该cookie是会话级别

特别说明

①如果该web应用只有一个cookie,那么在删除后cookie消失,若有多个cookie,那么该cookie消失,其他cookie还在
②如果不设置生命周期,那么浏览器关闭,cookie就消亡

cookie可以被多个浏览器共享

cookie是一张表

一列为name,一列为value

重名替换

如果重名就会替换存在的cookie值

cookie限制

一个浏览器最多放300个cookie,一个web站点最多20个,每个cookie大小最多4kb

中文乱码

当cookie值为中文时,会出现乱码情况

  1. //存放中文乱码情况,因此要编码
  2. String val=java.net.URLEncoder.encode("毒药", "utf-8");
  3. Cookie cookie2=new Cookie("name", val);
  4. //读取中文要解码
  5. String getString=java.net.URLDecoder.decode(cookie2.getValue(),"utf-8" );

session

说明
session是存放在服务器内存中的
一个用户浏览器独享一个session域对象
session的默认生命周期是30min
session可以看做是hashmap,一列是name(string),另一列是值(object)
session的属性值可以为一个对象
注意:如果session属性名字相同,则会替换
  1. //当访问session没有发现时,自动创建session
  2. HttpSession session=request.getSession();
  3. //设置属性
  4. session.setAttribute("name","五一");
  5. //设置生命周期,默认30min
  6. //session.setMaxInactiveInterval(arg0);
  7. //获取session
  8. String nameString=(String) session.getAttribute("name");
  9. //去除某个属性
  10. session.removeAttribute("name");

设置生命周期

  1. 在tomcat的安装目录D:\Program Files\apche\apache-tomcat-6.0.43\conf找到web.xml修改session-timeout,单位是分钟,应用到每一个web应用中
  1. <session-config>
  2. <session-timeout>30</session-timeout>
  3. </session-config
  1. 在servlet文件中加入语句
    session.setMaxInactiveInterval(60)
    单位是秒,只对本web应用有效。指的是访问时间长度为60内,没有访问,则session过期,如果在第59s访问该session,则重新计时
  2. 强制使session失效,该方法适用于安全退出
    session.invalidate()
    这使得session全部属性失效
    若使某个属性失效,则为
    session.removeAttribute(String arg0)
    如果发生冲突,则以自己的web应用为准

为什么服务器能为不同的浏览器提供不同的session

当浏览器第一次访问服务器时是没有session的,访问后便产生了一个cookie记录了jsessionid返回给浏览器,当浏览器再次访问服务器会带着jsessionid访问,此时就意味着该浏览器创建过session,无需创建。正是由于jsessionid的存在使得服务器能为不同的浏览器提供不同的session,得到jsession1id的方法是session.getId()

验证码

原理是java绘图技术

session的销毁时间

如果session的生命周期是30min,那么session不会随着浏览器的关闭而销毁,,30min后服务器会自动将session销毁


cookie与session区别

存在位置

cookie存在客户端的临时文件夹,可由多个浏览器共享
session存在服务器的内存中,一个session域对象为一个用户浏览器使用

安全性

cookie是以明文方式存在浏览器中的,安全性较弱,可使用md5加密算法加密
session是存在服务器内存中的,安全性较强

网络传输量

cookie会传递信息给服务器,占用带宽
session的属性不会传给客户端

生命周期

假设生命周期是20分钟
cookie的生命周期是累积的,从创建的时候就开始计算,20分钟后cookie生命周期结束,cookie无效
session的生命周期是间隔的,从创建时,在开始计时的20分钟内没有访问session,那么session的信息无效,如果在20分钟内,在第19分钟访问session,那么其生命周期重新开始计算
在以下情况session也会失效

session是会占用内存的,因此不要向session存放过多内容

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注