Session

====理论====
session描述
最原始的session是服务器端的一个Map结构的存储空间,但经常用的是HttpSession。
放入session的值可以在程序中的任何jsp,java类中进行读取。通常会将用户对象存入session,
session的内容不宜过多,有必要全局记录的数据,就可以放入session中进行存储。
多数量访问,session的存活时间不能太长,因为session是存活于服务器端的,占用资源。

Cookie和Session的区别
Session是存储于服务器端的,由服务器去销毁和创建
Cookie是存储于客户端的,可以由服务器端去销毁和创建也可以客户端去销毁
Cookie可以和Session一样,浏览器关闭时销毁
Session也可以和Cookie一样,保存长时间,只要SessionID不丢,Session的存活时间够长就可以实现。
Session是可以存储Object value的Map,而Cookie只能存储String value。
Session是单例的,Cookie就很随意了,但是request中中的Cookie数组只有一个。

session的创建
session是单例的,如果存在一个session,则不会再创建session。否则创建出一个session并生成一个sessionid并保存到Cookie中。
所以如果创建了session,就会创建一个叫JSESSIONID的cookie,其值为SessionID,保存在了客户端。只要创建了session,那么Cookie
的数量就至少为1.且存储SessionID的这个Cookie的MaxAge为-1,表示浏览器关闭,Cookie就被删除。
request.getSession();只要执行这句代码,就会创建session对象,如果存在,就指向对象。SessionID是不会变的。


jsp中的session
jsp中均可以访问session,因为jsp中翻译成servlet时,会隐式的加上HttpSession session = request.getSession(true);
所以在jsp中session是一个隐含的对象。所以只要第一次访问jsp就会创建一个session。


session存活时间限制
在web.xml中可以进行配置
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
<!--单位为分钟,如果为负数或0,表示不限制session-->

session的销毁
session的销毁原因归根结底是超时,长时间不使用就会被服务器销毁。
1,关闭浏览器(其本质还是超时)
  因为保存SessionID的这个Cookie的MaxAge为-1,所以浏览器关闭后,Cookie就被删除了,所以SessionID就会丢失。
  丢失后Session无法获取,获取不到就无法使用就会被倒计时,然后销毁。
  根据这个原理,可以实现浏览器关闭后继续使用原来的session。可以将保存SessionID的Cookie的MaxAge搞大点。单位是秒。
  注意的是,记得要重新response.addCookie(Cookie);否则更改了MaxAge也是无效的。
2,超时,这是根本原因。
 


====应用====
session的添加和删除属性
session.setAttribute("key",Object value);添加属性
session.removeAttribute("key");删除属性
### SESSION在编程中的含义 SESSION是一种用于存储用户会话信息的技术,在Web开发中广泛使用。它通过在服务器端保存用户的特定数据,使得用户在一个浏览器会话期间能够保持状态一致[^2]。默认情况下,PHP配置文件`php.ini`中定义了SESSION的保存方式为`files`(即`session.save_handler=files`),这意味着SESSION数据会被序列化并存储到文件系统中,具体路径由`session.save_path`参数决定[^1]。 #### 文件命名规则 SESSION文件通常以`sess_`作为前缀,后面跟随的是唯一的SESSION ID。如,如果某个SESSION ID为`c72665af28a8b14c0fe11afe3b59b51b`,那么对应的文件名为`sess_c72665af28a8b14c0fe11afe3b59b51b`[^1]。 --- ### SESSION的工作原理 SESSION的核心思想是利用一种机制来跟踪用户的请求,并将这些请求关联起来形成一个完整的会话过程。以下是其工作流程: 1. **初始化SESSION** 当用户首次访问网站时,服务器会创建一个新的SESSION,并生成一个唯一标识符——SESSION ID。此ID被发送给客户端,一般通过Cookie的形式传递回服务器[^3]。 2. **数据存储** 用户的相关数据(如登录状态、购物车内容等)会被存储在服务器上的SESSION变量中。这些数据仅限于当前用户的会话范围,其他用户无法访问。 3. **恢复SESSION** 后续每次请求时,客户端都会携带之前分配的SESSION ID,服务器据此找到对应的数据记录并还原用户的会话环境[^3]。 --- ### PHP中SESSION的基本用法 以下是一个简子,展示如何在PHP中启动和管理SESSION: ```php <?php // 初始化SESSION session_start(); // 设置SESSION变量 $_SESSION['username'] = 'JohnDoe'; // 获取SESSION变量 echo $_SESSION['username']; // 输出 JohnDoe // 删除SESSION变量 unset($_SESSION['username']); // 销毁整个SESSION session_destroy(); ?> ``` 在这个示中: - `session_start()`函数用来开启或恢复现有的SESSION。 - 使用数组形式的`$_SESSION`超全局变量可以方便地存取数据。 - 调用`session_destroy()`可彻底销毁当前SESSION及其所有数据。 需要注意的是,默认情况下SESSION数据是以文件形式存储的,因此随着并发量增加可能会带来一定的性能开销。在这种场景下,考虑采用数据库或其他更高效的存储方案可能更为合适[^4]。 --- ### SESSION与其他技术的区别 为了更好地理解SESSION的作用,下面对比一下它与COOKIE以及TOKEN的主要差异: | 特性 | COOKIE | SESSION | TOKEN | |-----------------|----------------------------------|----------------------------------|-------------------------------| | 存储位置 | 客户端 | 服务端 | 客户端 | | 数据安全性 | 较低 | 高 | 取决于加密算法 | | 生命周期控制 | 支持自定义过期时间 | 基于SESSION ID的有效期限 | 依赖签发时间和刷新策略 | | 性能影响 | 对服务器无直接影响 | 占用较多内存资源 | 减轻服务器负担 | 从认证流程的角度来看,三种技术各有优劣,应根据实际需求灵活选用[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值