request.getSession()方法

Session在网络应用中被称为会话。

具体到web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间,因此从概述上我们可以看到,session实际上是一个特定的时间概念。

需要注意的是:一个session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的session同B用户和C服务器建立连接时所处的Session是两个不同的session。

Session的工作原理:

(1)当一个session第一被启动时,一个唯一的标识被存储与本地的cookie中;

(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。

(3)当执行PHP脚本时,通过session_register()函数注册session变量。

(4)当PHP 脚本执行结束时,未被销毁的session变量会被自动保存在本地的一定路径下的session库中,这个路径可以通过php.ini文件中的session_save_path指定,下次浏览器网页时可以加载使用。

HttpRequest对象有两种形式的getSession的方法调用:

一个是getSession()

一个是getSession(boolen isNew)

这样,前者会检测当前时候是否有session存在,如果不存在则创建一个,如果存在就返回当前的。

getSession()相当于getSession(true);

参数为true时,若存在会话,则返回该会话,否则新建一个会话;

参数为false时,如存在会话,则返回该会话,否则返回NULL;

转自:http://www.blogjava.net/border/archive/2006/07/31/61073.html

### `request.getSession(true)` 与 `request.getSession(false)` 的区别 在 Java Web 开发中,`request.getSession(true)` 和 `request.getSession(false)` 是 `HttpServletRequest` 接口中用于获取 `HttpSession` 对象的两种方式,它们在行为上存在关键差异。 当调用 `request.getSession(true)` 时,如果当前请求中没有与之关联的 `HttpSession`,则会自动创建一个新的 `HttpSession` 对象并返回。这种行为适用于需要确保存在一个会话的场景,例如用户登录后需要将用户信息存储到会话中: ```java HttpSession session = request.getSession(true); session.setAttribute("user", user); ``` 这种调用方式等价于直接调用 `request.getSession()`,因为默认参数为 `true`,即自动创建新会话[^1]。 而调用 `request.getSession(false)` 时,如果当前请求中没有关联的 `HttpSession`,则不会创建新的会话,而是返回 `null`。这种行为适用于仅需读取会话信息而不希望在无会话时自动创建的场景,例如在受保护资源中验证用户是否已登录: ```java HttpSession session = request.getSession(false); if (session != null) { User user = (User) session.getAttribute("user"); if (user != null) { // 用户已登录 } else { // 用户未登录或会话失效 } } else { // 不存在会话 } ``` 使用 `false` 参数可以避免不必要的会话创建,从而节省服务器资源并提升性能。此外,这种方式还能帮助开发者更清晰地处理未登录或会话失效的情况,避免出现空指针异常(NullPointerException)[^3]。 ### 适用场景 - **`request.getSession(true)`**:适用于需要确保存在一个会话的场景,例如用户登录、初始化会话数据等。 - **`request.getSession(false)`**:适用于仅需读取会话数据而不希望自动创建会话的场景,例如访问受保护资源前的会话验证。 通过合理选择参数,开发者可以更精细地控制会话的生命周期和资源使用情况,提升应用的安全性和效率。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值