会话技术

cookie概述

基础概念

cookie对象

  • 创建 new(String 键,String 值);

  • 设置持久化 setMaxAge(int seconds);
    ①时效从add时开始计算(不是从关闭浏览器/最后一次访问开始)
    ②setMaxAge(0)表示清除cookie,默认关闭浏览器进行此操作

  • 设置携带路径 setPath(“页面路径”);

    ①默认情况下同项目内全部携带
    ②如果指定了页面路径,则该cookie仅能在访问指定路径时被客户端的request携带
    ③setPath(“/”);表示访问当前服务器下任意项目都会携带该cookie

  • 获取cookie信息
    ①getName();
    ②getValue();

请求响应对象

  • 获取全部cookie对象 request.getCookies();
  • 将cookie对象发送至客户端 response.addCookie(Cookie c);

基本流程

  1. 客户端提交数据
<form action ="c1" method = "post">
<input type="text" name="username" >
<input type="password" name="password" >
<br>
<input type="checkbox" name="stayLogin" value="stay">下次自动登录
<br>
<button>提交</button>
</form>

在这里插入图片描述

  1. 服务器接收数据,判断并存储(set-Cookie)

服务器判断是否需要存储到cookie(如客户端勾选自动登录时)

if(request.getParameter("stayLogin")!=null){
	//还需要 && 查询数据库结果为登录成功
	//创建cookie,存储数据
	Cookie c1 = new Cookie("username",request.getParameter("username"));
	Cookie c2 = new Cookie("password", request.getParameter("password"));
	//设置持久化保存时效,单位秒。
	c1.setMaxAge(120);
	c2.setMaxAge(120);
}

响应头中服务器判断并存储了用户名
响应头中服务器判断并存储了用户名密码

  1. 设置cookie

//发送cookie给客户端(服务器对客户端的响应使用response)
response.addCookie(c1);
response.addCookie(c2);
  1. 再次访问同一站点,不关闭连接的情况下,request将携带cookie

在这里插入图片描述
请求头中客户端携带了cookie中的用户名密码

  1. 读取cookie
//数据已经存储到cookie中,可以通过请求读取到本地进行其他操作
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
//获取所需要的cookie(cookie里面还有其他内容)
	if(cookie.getName().equals("username") || cookie.getName().equals("password") ){
		System.out.println(cookie.getName());
		System.out.println(cookie.getValue());
	}
}

生命周期

默认是一次会话,但可以进行持久化设置
(存储的数据声明周期默认为一次与服务器的连接,关闭客户端,断开与服务器的连接就结束)
关闭服务器不会导致cookie失效!!!cookie是存储在客户端的
在这里插入图片描述

cookie方法

getName()
getValue()
setPath()
setMaxAge()

session 概述

session是基于cookie的

运作过程

  1. session域对象由JSESSIONID和HttpSession对象组成,前者标识了后者的存储地址
  2. 客户端访问服务器时,服务器与客户端成功建立连接后生成一个session域对象
  3. 如客户端代码中存在获取session的动作(request.getSession()),服务器会将session的ID通过set-Cookie发送给客户端(HTML不具备写代码/获取域对象功能
  4. 客户端接收到并在本次会话的后续请求时都带着此cookie,以便使用域对象中的数据
  5. 浏览器关闭,cookie默认失效,JSESSIONID自然也失效,域对象中的数据也无法获取(即便数据还存储在session中)

session与cookie异同

sessioncookie
默认级别会话级别(浏览器关闭即失效)会话级别(浏览器关闭即失效)
域对象
默认时效数据默认关闭浏览器后再保存30分钟
客户端SESSIONID存储在cookie中,默认遵循cookie时效
默认0s(关闭浏览器即失效)
配置数据存储时效tomcat/conf/web.xml中(或项目文件中的web.xml)配置<session-config> 的<session-Timeout>代码中cookie.setMaxAge
数据存储时效计算方式从上次访问之后开始计算从配置cookie开始计算
获取数据方式request.getSession(jsp中可直接使用内置session对象);
session.getAttribute;
cookie.getName();
cookie.getValue()
存储数据类型objectstring
注意事项如果session存储时长不等于id存储时长,时效按较短的计算,超时后获取到的是null
销毁优先级:invalidate>当前项目的web.xml配置时效>Tomact/conf/web.xml

session的持久化

Cookie JsessionId =new Cookie(“JSESSIONID”, request.getSession().getId());
JsessionId .setMaxAge(120);

session的方法

getId() 获取JSESSIONID
setAttribute()
getAttribute()
removeAttribute() 移除键值对
invalidate() 立刻销毁整个session

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值