什么是会话 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话.
一、cookie详解 cookie小结- cookie 是在服务端创建
- cookie 是保存在浏览器这端
- cookie 的生命周期可以通过: cookie.setMaxAge(2000); ☞ 如果不设置setMaxAge则该cookie的生命周期当浏览器关闭时,就消亡.
- cookie 可以被多个浏览器共享(与session的区别)
- 怎么形象的理解? 我们可以把cookie 想成一张表(或者一个字典)
如果cookie重名会有什么问题? 如果重名就会替换存在的cookie值.
- 一个web应用可以保存多个cookie,但保存在同一个cookie文本在客户端浏览器下
- cookie存放的时候是以明文方式存放,因此安全较低.,我们可以通过加密后保存
- cookie默认生命周期是会话级别,可以通过setMaxAge() 可以设置生命周期 setMaxAge(正数) , 即多少秒后该cookie失效 setMaxAge(0) ,删除该cookie setMaxAge(负数), 相当于该cookie生命周期是会话级别。
//先得到该cookie
Cookie cookies[]=request.getCookies();
for(Cookie cookie: cookies){
if(cookie.getName().equals("id")){
System.out.println("id");
//删除
cookie.setMaxAge(0);
//一定带上这句话,否则不能删除
response.addCookie(cookie);
}
}
特别说明: 如果该web应用只有一个cookie ,则删除该cookie后,在浏览器的临时文件夹下没有该cookie文件,如果该web应用有多个cookie,则删除一个cookie后,文件还在,只是该cookie没有了。
2、cookie的细节- 一个浏览器最多放入 300cookie,一个web站点,最多 20cookie,而且一个cookie大小限制子4k
- cookie存放中文,怎么处理? 存放:
String val=java.net.URLEncoder.encode("我是名字","utf-8");
Cookie cookie=new Cookie("name",val);
取出:
String val=java.net.URLDecoder.decode(cookie.getValue(), "utf-8");
out.println("name ="+val);
3、cookie可以用来做什么呢?
- 保存用户名、密码,在一定时间不用重新登录
- 记录用户访问网站的喜好,比如有无背景音乐、网页的背景色是什么
- 网站的个性化,比如定制网站的服务、内容
- 如何创建一个cookie(在服务器端创建的)
Cookie c=new Cookie(String name, String val);
- 如何将一个cookie添加到客户端
response.addCookie(c);
- 如何读取cookie(从客户端读到服务器)
request.getCookie();
5、cookie其它说明
- 可以通过IE——工具——internet选项——隐私——高级来启用或是禁用cookie
- 由于cookie的信息是保存在客户端的,因此安全性不高
- cookie信息的生命周期可以在创建时设置(比如30s),从创建那一时刻起,就开始计时,到时该cookie的信息就无效了
什么是session? 当用户打开浏览器,访问某个网站时,服务器就会在服务器的内存为该浏览器分配一个空间,该空间被这个浏览器独占。这个空间就是session空间,该空间中的数据默认存在时间为30min,你也可以修改该值。
上面说的这个30min指的是用户的发呆时间,而不是累计时间
1、session生命周期系统默认是30分钟。 有3种session生命周期的设置:
- 1、一个地方是 tomcat/conf/web.xml
30//表示30分钟的意思
对所有的web应用生效
- 2、另外一个地方,就是在单个web应用的下去修改 web.xml
30session精确到分钟,cookie精确到秒
如果发生冲突,则以自己的web应用优先级高 - 3、session.setMaxInactiveinterval(60) 发呆六十秒后session失效
2、对session和cookie生命周期小结:- session是存在服务器的内存中
- 一个用户浏览器,独享一个session域对象
- session中的属性的默认生命周期是30min ,你可以通过 web.xml来修改
- session中可以存放多个属性
- session 可以存放对象
- 如果 session.setAttribute(“name”,val) , 如果名字重复,则会替换该属性.
- 为什么服务器能够为不同的浏览器提供不同session? 因为每个浏览器去访问web站点的时候,如果发出的http请求头没有带JSESSIONID头就会自动给你创建一个并返回。
- 得到session HttpSession hs=request.getSession(true);
- 向session添加属性 hs.setAttribute(String name,Object val);
- 从session得到某个属性 String name=hs.getAttribute(String name);
- 从session中删除掉某个属性 hs.removeAttribute(String name);
- 注销session中的内容(比较安全的一种方式) ht.setMaxInactiveInterval(0);
- 存在的位置 cookie:存在客户端的临时文件夹 session:存在服务器内存中,一个session域对象为一个用户浏览器服务
- 安全性 cookie:是以明文的方式放在客户端的,安全性弱,可以通过(MD5)加密再存放。 session:是存放在服务器内存中,所有安全性好
- 网络传输 cookie:会传递信息给服务器 session的属性值不会给客户端
- 生命周期 cookie的生命周期:是累计时间,即如果我们给cookie设置setMaxAge(30),则30秒后失效。 session的生命周期:是间隔时间,如我们设置session 20min,指在20min内,如果没有访问session,则session失效(session失效是指无法读取session属性), 在以下情况session也会失效 (1)关闭tomcat (2)reload web应用 (3)时间到 (4) 调用invalidate方法
- 访问范围 cookie:为多个用户浏览器共享。 session:为一个用户浏览器独享。
- 使用原则 因为session会占用服务器的内存,因此不要向session中存放过多过大的对象,会影响性能。
本文部分内容参考网络及韩顺平老师的讲义
作者:jiankunking 出处:http://blog.csdn.net/jiankunking