session的工作原理

session实现 流程:当客户端访问服务器时,服务器根据需求设置seesion,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,浏览器将这个session_id保存在内存中(还有其他的存储方式,例如写在url中),我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就清理掉了,它不会存在用户的cookie临时文件。以后浏览器每次请求都会额外加上这个参数值,服务器再根据这个session_id,就能获得客户端的数据状态。浏览器每次请求都会带上由服务器为它生成的session_id。如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放的,此时数据还会存在,,只要我们知道那个session_id,就可以继续通过请求获得此session的信息;但是这个时候后台的session还存在,但是session的保存有一个过期时间,一旦超过规定时间没有客户端请求,他就会清楚这个session。


工作原理:

       1、创建session

              当用户访问到一个服务器时,如果服务器启用Session,服务器就要为该用户创建一个Session,在创建这个Session的时候,服务器首先检查这个用户发来的请求里是否包含了一个Session_id,如果包含了一个Session_id,则说明了之前该用户已经登录过兵为此用户创建过session,那服务器就按照这个session id把这个session在服务器的内存里找出来(如果找不到,就有可能为它新创建一个),如果客户端请求里不包含有session_id,则为该客户端创建一个session并生成一个与此session相关的session id。这个session id将在本次响应中返回到客户端保存,而保存这个session id的正是cookie。

      2、使用session

          (1)保存在cookie里

        (2)URL重写,将session id直接附加在URL路径的后面

        (3)作为查询字符串附加在URL后面。


cookie和Session的区别

      1、存放位置不同

           Cookie保存在客户端,Session保存在服务器端

     2、安全性的不同

          Cookie存储在浏览器中,对客户端是可见的。Session存储在服务器端,对客户端是透明的。

    3、存取方式不同

          Cookie中只能保管ASCII字符串,而Session能够存取任何类型的数据。

  4、有效期的不同

        只需要设置Cookie的过期时间属性为一个很大很大的数字,Cookie就可以在浏览器保存很长很长时间。由于Session依赖于名为Session id的Cookie,而cookie Session id的过期时间默许为-1,只需关闭了浏览器,该Session就会失效。

   5、跨域支持上的不同

        Cookie支持跨域名访问,例如将domain属性设置为“.baidu.com”,则以".baidu.com"为后缀的一切域名均能访问该Cookie。跨域名Cookie如今普遍用在网络中。而Serssion则不会支持跨域名访问。Session仅在他所在的域名内有效。

        

### Session 的工作机制及实现原理 #### 1. **Session 基本概念** Session 是一种用于跟踪用户状态的机制,允许服务器在多次 HTTP 请求间识别和记住特定用户。HTTP 协议本身是无状态的,因此每次请求都被视为独立事件。为了弥补这一缺陷,Session 提供了一种解决方案,在多个请求之间维持用户的会话信息[^2]。 --- #### 2. **Session 工作流程** - 用户首次访问网站时,服务器生成唯一的标识符(即 sessionId),并将该标识符返回给客户端。 - 客户端通常通过 Cookie 存储 sessionId,并在后续请求中将其发送回服务器。 - 服务器利用 sessionId 查找对应于该用户的会话数据,从而恢复用户的状态[^3]。 ```mermaid sequenceDiagram participant Client as 浏览器 participant Server as 服务器 Note over Client,Server: 初次访问 Client->>Server: 发起GET请求 Server-->>Client: 返回响应<br/>设置Cookie(含sessionId) Note over Client,Server: 后续访问 Client->>Server: GET请求附带Cookie<br/>(含sessionId) Server-->>Server: 查询sessionId关联的数据 Server-->>Client: 返回个性化响应 ``` --- #### 3. **Session 数据存储位置** Session 数据可以存储在多种地方,具体取决于应用需求和技术选型: - **内存存储**:最简单的形式,将 Session 数据存放在服务器本地内存中。这种方式性能高但缺乏持久性和可扩展性,适用于小型项目或开发测试阶段[^3]。 - **文件系统**:某些框架可能支持将 Session 数据序列化到磁盘上的文件中。这种方法虽然解决了重启丢失的问题,但由于 I/O 开销较大,效率较低[^3]。 - **分布式缓存**:现代架构倾向于使用 Redis 或 Memcached 等外部缓存服务来集中管理 Session 数据。这种设计不仅提高了可用性,还便于水平扩展和支持负载均衡下的 Session 共享[^4]。 --- #### 4. **Session 生命周期管理** - **创建**:当用户第一次访问受保护资源时,如果没有有效的 sessionId,则服务器为其创建新的 Session 实例并分配唯一 ID[^2]。 - **维护**:每当收到带有合法 sessionId 的请求时,服务器更新最后一次活动时间戳以延长有效期。如果超过设定的时间间隔未检测到活跃迹象,则判定为过期[^2]。 - **销毁**:可以通过显式调用 `invalidate()` 方法手动清除某人的登录记录;或者依赖定时清理策略自动移除那些长期闲置不用的条目[^2]。 --- #### 5. **安全性考量** 由于 sessionId 往往暴露在网络传输环节之中,所以必须采取措施防止恶意攻击者窃取敏感凭证: - 使用 HTTPS 加密通信链路; - 设置 HttpOnly 属性阻止 JavaScript 访问 Cookies; - 缩短默认存活周期减少风险窗口大小; - 对异常行为实施监控报警机制等等[^3]。 --- ### 总结 综上所述,Session 是一种重要的技术手段用来克服 HTTP 协议固有的局限性,使得跨页面交互成为现实。尽管其实现细节因平台而异,但总体思路遵循相似模式——借助临时令牌建立起持续性的联系,并妥善保管相关信息直至最终释放资源[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值