学习会话管理

会话管理

概念

  管理浏览器与服务器之间的会话过程中产生的会话数据

  经过分析,数据共享可以使用域对象,因为ServletContext只有一个,导致每次向里面放数据的时候,如果键相同,值就会覆盖所以不可行.而request对象虽然是多个,但是如果要取到共享的数据,需要使用转发,所以也不可行.因此出现了会话管理技术

会话管理技术

cookie技术:数据保存在浏览器端
session技术:数据保存在服务器端

Cookie技术原理

  1.由服务器创建Cookie对象,发送给浏览器,浏览器会保存到缓存中去,response.addCookie(cookie); (响应头:set-cookie:name=jacky)
  2.下次访问携带保存的cookie信息,请求头:cookie:name=jacky
  3.服务器获取浏览器发送的cookie数据,response.getCookiess()
注意:如果需要发送中文数据,需要使用URLEncoder.encode()进行加密

Cookie细节

  1.cookie的数据类型一定是字符串,如果要发送中文,必须先对中文进行URL加密才可以发送
  2.setPath():修改cookie所在的有效路径.什么是有效路径?如果把该cookie设置到某个有效路径下,每当浏览器访问这个有效路径的时候,才会携带cookie数据给服务器
  3.setMaxAge(整数):设置cookie的有效时间
    正整数:表示超过了正整数的数值时间,cookie就会丢失(单位秒)
    负整数:如果浏览器关闭了,cookie就丢失
    0:删除同名的cookie
  4.cookie可以有多个,但是浏览器一般只允许存放300个cookie,每个站点最多存放20个cookie,每个cookie的大小限制为4KB

Session引入

Cookie特点:
  1.会话数据放在浏览器端
  2.数据类型只能是String,而且有大小限制(4KB)
  3.相对数据不安全
Session特点:
  1.会话数据放在服务器端(服务器内存),占用服务器的资源
  2.数据类型任意,没有大小限制
  3.相对安全一点

Session使用步骤

HttpSession对象:
  1.创建HttpSession对象,用于保存会话数据
  request.getSession(); 创建或者获取session对象
  2.修改HttpSession对象
  void setMaxInactiveInterval(int interval) 设置session对象的有效时间
  void invalid() 手动销毁session对象
  3.保存会话数据(作为域对象)
  session.setAttribute(“name”,Object); 保存数据
  session.getAttribute(“name”); 获取数据
  session.removeAttribute(“name”); 删除数据

Session原理

问题:服务器怎么区分不同的浏览器会话?
前提:可以从session对象中取出数据,必须是操作的是同一个session对象
  1.服务器创建session对象,服务器会给这个session对象分配唯一的标记JSESSION
  2.把JSESSION作为Cookie发送给服务器
  3.浏览器保存JSESSION,在下次访问的时候携带这个JSESSION去访问服务器
  4.服务器得到JSESSION对象,在内存中搜索是否存在指定JSESSION的session对象
  5.如果找到,则返回这个session对象
  6.如果找不到,可能直接返回null,或者再创建新的session对象

结论:通过JSESSION在服务器中查询对应的session对象

Session细节

  1.setMaxInactiveInterval(秒数):设置session对象的有效时间
    问题:session对象在上面时候销毁?
    注意:不是浏览器关闭,session对象就销毁!!!
    默认情况下:等待30分钟空闲时间,session对象才会销毁

  2.可以让JSESSION不会随着浏览器关闭而丢失

  3.直接手动销毁session对象
    invalidate()

  4.创建或者获取session对象
  request.getSession() = request.getSession(true); 创建或者得到session对象,查询session对象,如果没有session对象,则创建新的session对象
  request.getSession(false) 得到session对象.查询session对象,如果session对象不存在,则直接返回null

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值