什么是会话
基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话.

一、cookie详解

cookie小结

  1. cookie 是在服务端创建
  2. 会话技术 cookie和session 学习笔记_cookie

  3. cookie 是保存在浏览器这端
  4. cookie 的生命周期可以通过:
    cookie.setMaxAge(2000);
    ☞ 如果不设置setMaxAge则该cookie的生命周期当浏览器关闭时,就消亡.
  5. cookie 可以被多个浏览器共享(与session的区别)
  6. 怎么形象的理解?
    我们可以把cookie 想成一张表(或者一个字典)
  7. 会话技术 cookie和session 学习笔记_cookie_02

  8. 如果cookie重名会有什么问题?
    如果重名就会替换存在的cookie值.
  9. 一个web应用可以保存多个cookie,但保存在同一个cookie文本在客户端浏览器下
  10. cookie存放的时候是以明文方式存放,因此安全较低.,我们可以通过加密后保存
  11. cookie默认生命周期是会话级别,可以通过setMaxAge() 可以设置生命周期
    setMaxAge(正数) , 即多少秒后该cookie失效
    setMaxAge(0) ,删除该cookie
    setMaxAge(负数), 相当于该cookie生命周期是会话级别。
.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的细节

  1. 一个浏览器最多放入 300cookie,一个web站点,最多 20cookie,而且一个cookie大小限制子4k
  2. 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可以用来做什么呢?

  1. 保存用户名、密码,在一定时间不用重新登录
  2. 记录用户访问网站的喜好,比如有无背景音乐、网页的背景色是什么
  3. 网站的个性化,比如定制网站的服务、内容

4、cookie使用

  1. 如何创建一个cookie(在服务器端创建的)
Cookie c=new Cookie(String name, String
  1. 如何将一个cookie添加到客户端
response.addCookie(c);
  1. 如何读取cookie(从客户端读到服务器)
request.getCookie();

5、cookie其它说明

  1. 可以通过IE——工具——internet选项——隐私——高级来启用或是禁用cookie
  2. 由于cookie的信息是保存在客户端的,因此安全性不高
  3. cookie信息的生命周期可以在创建时设置(比如30s),从创建那一时刻起,就开始计时,到时该cookie的信息就无效了

二、session详解

什么是session?

当用户打开浏览器,访问某个网站时,服务器就会在服务器的内存为该浏览器分配一个空间,该空间被这个浏览器独占。这个空间就是session空间,该空间中的数据默认存在时间为30min,你也可以修改该值。

会话技术 cookie和session 学习笔记_cookie_03

上面说的这个30min指的是用户的发呆时间,而不是累计时间

1、session生命周期

系统默认是30分钟。
有3种session生命周期的设置:

  • 1、一个地方是 tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>//表示30分钟的意思
</session-config>

对所有的web应用生效

  • 2、另外一个地方,就是在单个web应用的下去修改 web.xml
<session-config>
<session-timeout>30</session-timeout>session精确到分钟,cookie精确到秒
</session-config>

如果发生冲突,则以自己的web应用优先级高
- 3、session.setMaxInactiveinterval(60) 发呆六十秒后session失效

2、对session和cookie生命周期小结:

会话技术 cookie和session 学习笔记_web_04

3、session小结

  1. session是存在服务器的内存中
  2. 一个用户浏览器,独享一个session域对象
  3. session中的属性的默认生命周期是30min ,你可以通过 web.xml来修改
  4. session中可以存放多个属性
  5. session 可以存放对象
  6. 如果 session.setAttribute(“name”,val) , 如果名字重复,则会替换该属性.
  7. 为什么服务器能够为不同的浏览器提供不同session?
    因为每个浏览器去访问web站点的时候,如果发出的http请求头没有带JSESSIONID头就会自动给你创建一个并返回。

4、如何使用session?

  1. 得到session
    HttpSession hs=request.getSession(true);
  2. 向session添加属性
    hs.setAttribute(String name,Object val);
  3. 从session得到某个属性
    String name=hs.getAttribute(String name);
  4. 从session中删除掉某个属性
    hs.removeAttribute(String name);
  5. 注销session中的内容(比较安全的一种方式)
    ht.setMaxInactiveInterval(0);

三、cookie与session的比较

  1. 存在的位置
    cookie:存在客户端的临时文件夹
    session:存在服务器内存中,一个session域对象为一个用户浏览器服务
  2. 安全性
    cookie:是以明文的方式放在客户端的,安全性弱,可以通过(MD5)加密再存放。
    session:是存放在服务器内存中,所有安全性好
  3. 网络传输
    cookie:会传递信息给服务器
    session的属性值不会给客户端
  4. 生命周期
    cookie的生命周期:是累计时间,即如果我们给cookie设置setMaxAge(30),则30秒后失效。
    session的生命周期:是间隔时间,如我们设置session 20min,指在20min内,如果没有访问session,则session失效(session失效是指无法读取session属性),
    在以下情况session也会失效
    (1)关闭tomcat
    (2)reload web应用
    (3)时间到
    (4) 调用invalidate方法
  5. 访问范围
    cookie:为多个用户浏览器共享。
    session:为一个用户浏览器独享。
  6. 使用原则
    因为session会占用服务器的内存,因此不要向session中存放过多过大的对象,会影响性能。

本文部分内容参考网络及韩顺平老师的讲义

作者:jiankunking