Session使用和原理分析图与实现原理

简介: Session使用和原理分析图与实现原理

Web 开发会话技术 -Session

—session 技术

  1. Session 是服务器端技术,服务器在运行时为每一个用户的浏览器创建一个其独享的 session 对象/集
  2. 由于 session 为各个用户浏览器独享,所以用户在访问服务器的不同页面时,可以从各自 的 session 中读取/添加数据, 从而完成相应任务

session 基本原理

1. 当用户打开浏览器,访问某个网站, 操作 session 时,服务器就会在内存(在服务端)为该

浏览器分配一个 session 对象,该 session 对象被这个浏览器独占, 如图

2. 这个 session 对象也可看做是一个容器/集合,session 对象默认存在时间为 30min(这是在tomcat/conf/web.xml),也可修改

Session 可以做什么

1. 网上商城中的购物车

2. 保存登录用户的信息

3. 将数据放入到 Session 中,供用户在访问不同页面时,实现跨页面访问数据

4. 防止用户非法登录到某个页面

5. .....

如何理解 Session

1. session 存储结构示意图

2. 你可以把 session 看作是一容器类似 HashMap,有两列(K-V),每一行就是 session 的一个属性。

3. 每个属性包含有两个部分,一个是该属性的名字(String),另外一个是它的值(Object)

Session 的基本使用

1. 创建和获取 Session,API 一样

HttpSession hs=request.getSession();

第 1 次调用是创建 Session 会话, 之后调用是获取创建好的 Session 对象

2. 向 session 添加属性

hs.setAttribute(String name,Object val);

3. 从 session 得到某个属性

Object obj=hs.getAttribute(String name)

4. 从 session 删除调某个属性:

hs.removeAttribute(String name);

5. isNew(); 判断是不是刚创建出来的 Session

6. 每个 Session 都有 1 个唯一标识 Id 值。通过 getId() 得到 Sessio

session 底层实现机制

原理分析图

 

代码演示

CreateSession.java

1. public class CreateSession extends HttpServlet {
2. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3. //System.out.println("CreateSession 被调用...");
4. 
5. //1. 获取session, 同时也可能创建session
6. HttpSession session = request.getSession();
7. 
8. //2. 给session获取id
9.         System.out.println("CreateSession 当前sessionid= " + session.getId());
10. //3. 给session存放数据
11.         session.setAttribute("email", "zs@qq.com");
12. 
13. //4. 给浏览器发送一个回复
14.         response.setContentType("text/html;charset=utf-8");
15. PrintWriter writer = response.getWriter();
16.         writer.println("<h1>创建/操作session成功...</h1>");
17.         writer.flush();
18.         writer.close();
19. 
20.     }
21. 
22. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23.         doPost(request, response);
24.     }
25. }

测试 Session 创的机制, 注意抓包分析

ReadSession.java

1. public class ReadSession extends HttpServlet {
2. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3. //System.out.println("ReadSession 被调用...");
4. // 演示读取session
5. //1. 获取session, 如果没有sesion, 也会创建
6. HttpSession session = request.getSession();
7. //输出sessionId
8.         System.out.println("ReadSession sessionid= " + session.getId());
9. //2. 读取属性
10. Object email = session.getAttribute("email");
11. if (email != null) {
12.             System.out.println("session属性 email= " + (String) email);
13.         } else {
14.             System.out.println("session中没有 email属性 ");
15.         }
16. //给浏览器回复一下
17.         response.setContentType("text/html;charset=utf-8");
18. PrintWriter writer = response.getWriter();
19.         writer.println("<h1>读取session成功...</h1>");
20.         writer.flush();
21.         writer.close();
22.     }
23. 
24. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
25.         doPost(request, response);
26.     }
27. }

测试 Session 读取的机制, 注意抓包分析

Session 实现原理


目录
相关文章
|
前端开发 JavaScript 安全
开源一款剪贴板跨设备共享工具
`shigen`,编程博主,擅长多种语言,近期自制了一个名为`copyhub`的工具,用于局域网内跨设备同步剪贴板。设计灵感源于对现有共享工具的安全顾虑,采用`Flask`和`Redis`实现,前端直接HTML+JS,简化架构。用户通过取件码交换内容,不涉及复杂功能。代码已开源并在个人腾讯云服务器上部署。更多详情见shigen的GitHub和哔哩哔哩频道。一起探索,每天进步!
769 1
开源一款剪贴板跨设备共享工具
|
安全 Linux 数据安全/隐私保护
linux设置用户密码
在Linux中更改用户密码,使用`passwd`命令。要改当前用户密码,键入`passwd`;若要为其他用户(如`john`)更改密码,需有足够权限,输入`passwd 用户名`。按提示输入新密码并确认,终端不会显示输入内容。确保密码复杂且安全。作为root或有相应权限才能更改他人密码。忘记密码时,可能需通过恢复模式或引导加载器重置。具体步骤依Linux发行版不同。
855 4
|
安全 关系型数据库 数据库
Postgresql 数据库用户权限授权(用户角色分配模式)
为了更方面和安全地管理数据库用户账号权限安全,实现通过用户角色代理的模式,实现用户账号功能授权的模式
20868 2
Postgresql 数据库用户权限授权(用户角色分配模式)
|
Linux
Linux使用Aria2命令下载BT种子/磁力/直链文件
Linux使用Aria2命令下载BT种子/磁力/直链文件
3065 0
|
监控 Windows
Windows系统中Wireshark抓包工具的安装使用
Windows系统中Wireshark抓包工具的安装使用
2004 0
|
7月前
|
网络协议 Linux 网络安全
我用一条命令把内网的 RDP 桌面开到了浏览器里 —— Shield CLI 与主流隧道工具的技术对比
本文深度对比Shield CLI与ngrok、frp、Cloudflare Tunnel:Shield独有浏览器直连RDP/SSH/VNC能力,一条命令即开Web终端;而传统隧道仅解决网络可达,仍需客户端。聚焦协议支持、零配置体验、安全模型与国内可用性,揭示其“隧道+协议网关”融合架构的本质差异。
1078 4
|
C语言
next数组的两种求法详解及完整代码
求字符串的next数组: 方法一: 这里我们将next数组第1,2位分别设为0,1(还有-1,0这种设法,这里先将其设为0,1若有需要再减一即可) 后面求解每一位的next值时,根据前一位进行比较。 从第三位开始,将前一位与其next值对应的内容进行比较, 如果相等,则该位的next值就是前一位的next值加上1; 如果不等,向前继续寻找next值对应的内容来与前一位进行比较, 直到找到某个位上内容的next值对应的内容与前一位相等为止, 则这个位对应的值加上1即为需求的next值; 如果找到第一位都没有
1247 0
next数组的两种求法详解及完整代码
|
Java Maven
解决idea每次新建maven项目都需要重新配置maven的问题
解决idea每次新建maven项目都需要重新配置maven的问题
1026 2
|
SQL 存储 druid
浅析SaaS多租户系统数据隔离实现方案
多租户问题,其是一种架构设计方式,就是在一台或者一组服务器上运行的SaaS系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离。从这种架构设计的模式上,不难看出来,多租户架构的重点就是同一套程序下多个租户数据的隔离。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改
3147 0