会话管理(Cookie、Session)

会话管理:

管理 浏览器客户端 和 服务器端 之间会话过程中产生的会话数据

会话技术:
Cookie技术:会话数据保存在浏览器客户端
Session技术:会话数据保存在服务器端

常用方法案例:

1. cookie保存带状态的用户信息,服务器拿到可以直接用

2. cookie保存无状态的key,session保存有状态的value,服务器通过key找到value使用

        cookie=钥匙;服务器创建,在客户端加密保存

        session=储物柜;保存在服务器,浏览器要拿着钥匙找


Cookie技术

Cookie技术核心:

Cookie类:用于存储会话数据

1)构造Cookie对象(名值对) 

Cookie(String name, String value)

 2)设置cookie


void setPath(String uri)           设置cookie的有效访问路径

void setMaxAge(int expiry)           设置cookie的有效时间

void setValue(String newValue)         设置cookie的值

 3)发送cookie到浏览器端保存

void response.addCookie(Cookie cookie)          response发送"Set-Cookie"名称的响应头

 4)服务器接收cookie

Cookie[] request.getCookies()          request接收"Cookie"名称的请求头

Cookie原理步骤:

1)服务器创建cookie对象,把会话数据存储到cookie对象中。

new Cookie("name","value");

2) 服务器发送带cookie信息的响应头到浏览器

response.addCookie(cookie);

举例:set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)

3)浏览器得到服务器发送的cookie,然后保存在浏览器端

4)浏览器在下次访问服务器时,请求头会带着cookie信息

举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)

5)服务器接收浏览器带来的cookie信息

request.getCookies();

Cookie设置:

1)void setPath(String uri) :设置cookie的有效访问路径。   默认有效路径在当前web应用目录下

浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。

2)void setMaxAge(int expiry) :设置cookie的有效时间。   默认是会话级别的cookie

正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间(秒)从不调用cookie开始计算时间。
负整数:表示cookie数据保存浏览器的内存中(会话cookie)。浏览器关闭cookie就丢失了!
零:表示删除同名的cookie数据

3)Cookie数据类型只能保存非中文字符串类型。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。


案例:1.显示用户上次访问的时间。2.查看用户浏览器过的商品。

Cookie的局限

cookie长度有限,而且在客户端不安全

  1. Cookie只能存字符串类型。不能保存对象
  2. 只能存非中文。
  3. 1个Cookie的容量不超过4KB。

如果要保存非字符串,超过4kb内容,只能使用session技术!
Session特点:会话数据保存在服务器端(服务器的内存中)


Session技术

Session技术核心:

HttpSession类:用于保存会话数据

1)创建或得到session对象

HttpSession getSession()

HttpSession getSession(boolean create)

2)设置session对象

void setMaxInactiveInterval(int interval)         设置session的有效时间(秒)

void invalidate()           销毁session对象

String getId()           得到session编号

3)保存会话数据到session对象   (HttpSession本身就是域对象)

void   setAttribute(String name, Object value)           保存数据

Object   getAttribute(String name)           获取数据

void   removeAttribute(String name)           清除数据

Session原理步骤:

解读:HttpSession session = request.getSession();

1)第一次访问创建session对象,给session对象的JSESSIONID分配一个唯一的ID值

new HttpSession();

2)把JSESSIONID作为Cookie的值发送给浏览器保存

Cookie cookie = new Cookie("JSESSIONID", sessionID);

response.addCookie(cookie);

3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器

4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。

if(找到){

return map.get(sessionID);   //Map<String,HttpSession>

}

5)如果找到对应编号的session对象,直接返回该对象

6)如果找不到对应编号的session对象,创建新的session对象,返回1)继续

session技术还是用cookie技术辅助实现的,通过名叫JSESSIONID的cookie值在服务器找session对象!

Session设置:

1)String getId()          得到session编号(JSESSIONID的值)

2)两个getSession方法:

getSession(true)  /  getSession()           创建或得到session对象(如果没有匹配的session编号,会自动创建新的session对象)

getSession(false)          得到session对象(如果没有匹配的session编号,返回null)

3)session对象销毁时间:

3.1  默认情况30分服务器自动回收

3.2  设置session回收时间 (秒)        void setMaxInactiveInterval(int interval)

3.3  全局修改session有效时间(分钟)
在web.xml中配置:<session-config><session-timeout>数字</session-timeout></session-config>

3.4  手动销毁session对象         void invalidate()

4)避免浏览器JSESSIONID的cookie随着浏览器关闭而丢失的问题

//手动发送一个硬盘保存的cookie给浏览器
	Cookie c = new Cookie("JSESSIONID",session.getId());
	c.setMaxAge(60*60);
	response.addCookie(c);

案例:用户登录场景,购物车
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyc1211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值