-
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开链接,会话结束,再一次会话中可以包含多次请求和响应
-
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同意浏览器,一边在同一次会话的多次请求间共享数据
-
Http协议是无状态的,每次浏览器向服务器请求时,服务器都会视为新的请求,因此我们需要会话跟踪技术来实现会话内数据的共享。
-
实现方式: 1. 客户端会话跟踪技术:Cookie 2. 服务端会话跟踪技术:Session
Cookie的使用
-
客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
-
Cookie基本使用:
*发送Cookie
-
创建Cookie对象,设置数据
-
发送Cookie到客户端,使用response
String s = "张三";
String value = URLEncoder.encode(s, "UTF-8");
System.out.println(value);
//创建cookie
Cookie cookie = new Cookie("username" ,value);
//发送cookie到客户端,然后使用response;
//设置存活时间
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
*获取Cookie
-
获取客户端所有的Cookie,使用request
-
遍历数据,获取每一个对象:for
-
使用Cookie对象方法获取数据
//获取客户端所有的Cookie对象
Cookie[] cookies = request.getCookies();
//遍历
for (Cookie c:cookies) {
//getName()获取Key的值,getValue()获取value值
String name = c.getName();
if ("username".equals(name)) {//判断一下是否是我们要的cookie
String s = c.getValue();
//中文解码
String value = URLDecoder.decode(s, "UTF-8");
System.out.println(name+","+value);
break;
}
}
-
*Cookie原理
-
Cookie的实现是基于HTTP协议的
*响应头:set-cookie
*请求头:cookie
-
Cookie使用细节 (看上面代码)
-
Cookie存活时间
*默认,存储在浏览器的内存中,当关闭后,内存释放,Cookie被销毁
*setMaxAge(int seconds):设置Cookie存活时间
1. 正数:将cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
2. • 负数:默认值,Cookie在当前浏览器的内存中,浏览器关闭,则会被销毁
3. • 零:删除对应的Cookie
-
*存储中文:
1.Cookie不能直接存储中文
2.需要进行URL编码
Session
-
服务端会话跟踪技术:将数据保存到服务端
-
JaveEE 提供HttpSession接口,实现一次会话的多次请求间数据共享
-
使用:
*获取session对象
*Session对象的功能
setAttribute()
getAttribute()
removerAttribute()
//创建session对象
HttpSession session = request.getSession();
//绑定数据到session域中
session.setAttribute("username","zs");
//创建session对象
HttpSession session = request.getSession();
//获取session域中的数据
Object username = session.getAttribute("username");
System.out.println(username);
-
Session 原理:是基于Cookie实现的,Session的唯一标识id
*Tomcat会帮session对象创建id,然后以Cookie的形式发送给浏览器,然会再次发送的时候会携带session的Id,服务器会根据id来共享唯一Session数据。
-
Session的使用细节
*Session钝化和活化
-
服务器重启,Session是否还存在?
*钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
* 活化:再次启动服务器,从文件中加载数据到Session中
-
-
Session 销毁
-
默认情况下,无操作,30分钟自动销毁
在web.xml 中配置
<!--session 存活时间-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
-
-
调用Session对象的invalidate()方法,自己销毁。(例:退出登录需要将Session销毁)
小结
*Cookie 和 Session都是来完成一次会话内多次请求间的数据共享的
*区别:
1. 存储位置:Cookie数据存储在客户端,Session在服务器端
2. 安全性:Cookie不安全,Session安全
3. 数据大小:Cookie最大3KB,Session无大小限制
4. 存储时间:Cookie可以长期存储,Session默认30分钟,关闭服务器还是存在,但是关闭浏览器后,SessionId就销毁了,再次获取就不是同一个Session对象了。
5. 服务器性能:Cookie不占服务器资源,Session占用服务器资源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!