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);
基本流程
- 客户端提交数据
<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>
- 服务器接收数据,判断并存储(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);
}
响应头中服务器判断并存储了用户名密码
- 设置cookie
//发送cookie给客户端(服务器对客户端的响应使用response)
response.addCookie(c1);
response.addCookie(c2);
- 再次访问同一站点,不关闭连接的情况下,request将携带cookie
请求头中客户端携带了cookie中的用户名密码
- 读取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的
运作过程
- session域对象由JSESSIONID和HttpSession对象组成,前者标识了后者的存储地址
- 客户端访问服务器时,服务器与客户端成功建立连接后生成一个session域对象
- 如客户端代码中存在获取session的动作(request.getSession()),服务器会将session的ID通过set-Cookie发送给客户端(HTML不具备写代码/获取域对象功能)
- 客户端接收到并在本次会话的后续请求时都带着此cookie,以便使用域对象中的数据
- 浏览器关闭,cookie默认失效,JSESSIONID自然也失效,域对象中的数据也无法获取(即便数据还存储在session中)
session与cookie异同
session | cookie | |
---|---|---|
默认级别 | 会话级别(浏览器关闭即失效) | 会话级别(浏览器关闭即失效) |
域对象 | 是 | 否 |
默认时效 | 数据默认关闭浏览器后再保存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() |
存储数据类型 | object | string |
注意事项 | 如果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