会话跟踪技术 Session Cookie
1 什么是会话?
用户打开浏览器,访问 web 服务器的资源,这个时候会话建立起来,直到有一方断开了连接,会话结束。在一次的会话中可以包含多次的请求以及相应;
会话跟踪就是在一次会话的多次请求中共享数据;
一个浏览器访问一个服务器两者之间建立起来的就是一个会话,浏览器关闭页面,会话结束;
为什么需要共享数据?
比如一个登录功能,浏览器在保持打开的状态下,不小心点击了刷新,访问的是同一个服务器,乜有共享数据的话,上一次的登录信息都消失了,显然用户体验是不好的,所以这个时候需要进行会话跟踪,提高用户的体验;
共享数据,可以方便一些用户的操作,告诉服务器虽然是多次的操作,但是是一个用户发送的请求,同一个用户请求的数据是可以共享的;
比如登录一页网页,短时间内,不需要反复的登录,让服务器记住刚才是某个用户登录的就行;
2 解决 http 协议中的无状态实现方式
客户端会话跟踪技术:Cookie
服务端会话跟踪技术:Ssession
3 Cookie
3.1 Cookie 基本使用原理
3.1.1 服务端向浏览器发送 Cookie
@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1 创建 Cookie 对象
Cookie cookie = new Cookie("usernaem","zs");
// 2 发送 Cookie response
response.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
3.1.2 服务器获取浏览器发送来的 Cookie
@WebServlet("/bServlet")
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1 获取 Cookie 数组
Cookie[] cookies = request.getCookies();
// 2 遍历数组
for (Cookie cookie : cookies) {
// 3 获取数据
String name = cookie.getName();
if ("username".equals(name)) {
String value = cookie.getValue();
System.out.println(name + ":" + value);
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
3.3 Cookie 原理
Cookie 是怎么实现一次会话,两次访问的数据共享的
实现原理就是,服务器在响应头中将数据发送到浏览器,然后浏览器再访问该服务器的时候,在请求头中将 cookie 携带过去
3.4 Cookie 使用细节
中文的问题可以通过编码以及解码的形式进行解决
4 Session
将数据保存在服务端;
Java EE 提供 HttpSession 接口,实现了一次会话多次请求间数据共享的功能;
4.1 Session 基本使用
4.1.1 SessionDemo1
@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取Session 对象
HttpSession session = request.getSession();
// 存储到 Session 中
session.setAttribute("username","zs");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
4.1.2 SessionDemo2
@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取 Session 对象
HttpSession session = request.getSession();
// 获取数据
Object username = session.getAttribute("username");
System.out.println(username);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
4.2 Session 原理
Session 是基于 Cookie 的
4.3 Session 使用细节
浏览器关闭了之后,获取到的 Session 就不是一个了,因为相当于开启了两次会话,是两个不一样的会话;不关闭服务器,多次访问同一个服务器,那么 Session 就是同一个,因为始终是一个会话;Session 的数据,不能关闭服务器,但是 Cookie 的数据可以在计算机中存储很长时间;
5 Cookie 与 Session 选择使用的总结
Cookie 为了长期存储,未登录就可以识别的情况下使用;
Session 存储的是安全数据;
6 登录注册案例需求
6.1 需求说明
1、完成用户登录功能,如果用户勾选"记住用户" 下次的访问到登录界面自动的填充用户名以及密码;
2、完成注册功能,实现验证码功能
7 小结
Cookie 保存在客户端 可以短时间 也可以长时间保存
浏览器向服务器发送登录请求,服务器将相关用户明以及密码通过响应头送回浏览器,以后浏览器再次访问的时候,可以使用保存在 Cookie 的用户名以及密码进行登录,不用输入也可以登录;
Session 保存在服务器 短时间保存
浏览器向服务器发送请求,服务器返回去一个 SessionID ,并不是返回 Cookie ,以后的浏览器凭借着服务器给的 SessionID 进行访问服务器,可以在短时间中保留登录信息,不会页面一刷新,登录信息就没了;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?