在HttpServlet中,HttpSession对象通常在request.getSession(true)方法调用时才创建。 HttpSession的使用是有代价的,需要占用服务器资源,本着能不浪费就不浪费的原则,我希望系统中的session都在掌握之中,在需要创建时由我们的代码明确创建。但是最近在开发中发现,新的session对象经常在意料之外出现,究竟是谁在创建session呢?
最常见的地方是错误的使用request.getSession()函数,通常在action中检查是否有某个变量/标记存放在session中。这个场景中可能出现没有session存在的情况,正常的判断应该是这样:
private boolean ifFlagExistInSession(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
if (session.getAttribute("flagName") != null) {
return true;
}
}
return false;
}
而下面的写法,则可能会生成一个新的不在我们意图之外的session:
private boolean ifFlagExistInSession(HttpServletRequest request) {
HttpSession session = request.getSession(); // a new session created if no session exists
if (session.getAttribute("flagName") != null) {
return true;
}
return false;
}
注意request.getSession() 等同于 request.getSession(true),除非我们确认session一定存在或者sesson不存在时明确有创建session的需要,否则请尽量使用request.getSession(false)。
分享到:
相关推荐
1. 在使用 getSession() 方法时,明确指定 create 参数的值,以避免不必要的会话创建或 NullPointerException 异常。 2. 在检查 Session 中是否存在某个变量或标记时,使用 getSession(false) 方法,以避免不必要的...
`request.getSession()`方法及其变体是其中的关键之一,用于获取或创建与当前请求关联的`HttpSession`对象。本文将深入探讨`request.getSession(true)`、`request.getSession(false)`以及`request.getSession(null)`...
它等同于`request.getSession(true)`,意味着如果不存在当前的会话,它将自动创建一个新的。这意味着每次调用此方法,只要没有现成的会话,就会在服务器端生成一个新的`HttpSession`对象,这可能会导致不必要的会话...
HttpSession session = request.getSession(); ``` - **会话对象的生命周期:** - 会话对象通常生存于服务器端。 - 服务器会自动通过Cookie或URL重写与客户端建立关联。 - `getSession()`方法会在没有找到现有会话...
如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...
每个用户在访问Web应用时,服务器都会为其创建一个唯一的Session ID,将其保存在客户端(通常以Cookie的形式),并在每次请求时通过这个ID来识别和追踪用户。当我们需要在特定事件(如Session过期、用户登出等)发生...
- **知识点**: 使用`request.getSession()`方法可以获取代表当前会话的Session对象。 - 如果会话不存在,则会自动创建一个新的Session对象。 **题目中的答案**: A. `request.getSession();`。 ##### 9. 获取...
HttpSession session = request.getSession(); session.setAttribute("key", "value"); ``` **5. application对象** application对象是ServletContext接口的实例,它在整个Web应用程序的生命周期内都有效,可用于...
request.getSession().setAttribute("captchaCode", code.toLowerCase()); } ``` 2. 验证码校验:在用户提交表单时,从请求中获取输入的验证码并与Session中存储的验证码进行对比,判断是否一致,从而完成验证码的...
- 调用`HttpServletRequest.getSession()`获取或创建Session。 - 使用`session.setAttribute(String name, Object value)`设置Session属性。 - 通过`session.getAttribute(String name)`获取Session属性。 - 当...
创建Session** - `request.getSession()`:如果当前请求没有对应的Session,此方法将创建一个新的Session并返回。 - `request.getSession(true)`:与上面相同,但若不存在Session且创建失败(如禁用Cookie),会抛...
创建会话 `session = request.getSession();`,然后可以使用 `session.setAttribute("key", "value")` 存储数据,`session.getAttribute("key")` 获取数据,`session.invalidate()` 终止会话。 6. **application...
- 当用户访问网页并提交登录信息后,服务器验证成功,即可调用`HttpSession session = request.getSession();`创建新的Session。 - 通过`session.setAttribute("key", "value");`将数据存入Session,其中"key"为键,...
HttpSession session = request.getSession(); // 创建用户对象 NewsUser user = new NewsUser(); // 获取用户名和密码 String username = request.getParameter("username"); String password = request....
客户端的Session在此之前还不知道 客户端选择不加入Session,例如,如果客户端拒绝接收来自服务器的cookie 作为一个Servlet的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web...
默认情况下,Session可能会在服务器内存中长时间存储,消耗资源,同时也可能给不活跃的用户提供一种错觉,即他们仍然处于登录状态。为了避免这种情况,通常会设定一个合理的过期时间,一旦超过这个时间,Session就会...
- **创建Session** 在服务器端,使用`HttpSession session = request.getSession();`来创建一个新的Session,或者通过`request.getSession(true);`获取现有Session。如果不存在,会创建一个新的Session。 - **存取...
- `getSession`方法通常在用户首次访问网站时创建Session,在后续访问中则直接获取已存在的Session。 2. **转换SessionID为八进制字符串**: - `Integer.toOctalString(hs.getId().hashCode())`:首先通过`hs....
HttpSession session = request.getSession(); ``` 在 `getSession()` 背后,服务器会为每个用户分配一个唯一的会话ID,并将其存储在用户的Cookie或URL参数中。这样,当用户在网站上导航时,服务器可以通过这个ID...