`

谁在创建session(1)-不恰当的request.getSession()

    博客分类:
  • web
 
阅读更多
在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)。
分享到:
评论

相关推荐

    request.getSession().doc

    1. 在使用 getSession() 方法时,明确指定 create 参数的值,以避免不必要的会话创建或 NullPointerException 异常。 2. 在检查 Session 中是否存在某个变量或标记时,使用 getSession(false) 方法,以避免不必要的...

    java 中 request.getSession(true、false、null)的区别

    `request.getSession()`方法及其变体是其中的关键之一,用于获取或创建与当前请求关联的`HttpSession`对象。本文将深入探讨`request.getSession(true)`、`request.getSession(false)`以及`request.getSession(null)`...

    jsp 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)

    它等同于`request.getSession(true)`,意味着如果不存在当前的会话,它将自动创建一个新的。这意味着每次调用此方法,只要没有现成的会话,就会在服务器端生成一个新的`HttpSession`对象,这可能会导致不必要的会话...

    08-Session-Tracking-Chinese.pdf

    HttpSession session = request.getSession(); ``` - **会话对象的生命周期:** - 会话对象通常生存于服务器端。 - 服务器会自动通过Cookie或URL重写与客户端建立关联。 - `getSession()`方法会在没有找到现有会话...

    自己实现的spring-session

    如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...

    javaweb监听session

    每个用户在访问Web应用时,服务器都会为其创建一个唯一的Session ID,将其保存在客户端(通常以Cookie的形式),并在每次请求时通过这个ID来识别和追踪用户。当我们需要在特定事件(如Session过期、用户登出等)发生...

    Java-Web开发基础题库课后练习题答案章节测试题1-7章全.docx

    - **知识点**: 使用`request.getSession()`方法可以获取代表当前会话的Session对象。 - 如果会话不存在,则会自动创建一个新的Session对象。 **题目中的答案**: A. `request.getSession();`。 ##### 9. 获取...

    Java-Web程序设计案例教程第四章-JSP内置对象.ppt

    HttpSession session = request.getSession(); session.setAttribute("key", "value"); ``` **5. application对象** application对象是ServletContext接口的实例,它在整个Web应用程序的生命周期内都有效,可用于...

    kaptcha-spring-boot-starter-master.zip

    request.getSession().setAttribute("captchaCode", code.toLowerCase()); } ``` 2. 验证码校验:在用户提交表单时,从请求中获取输入的验证码并与Session中存储的验证码进行对比,判断是否一致,从而完成验证码的...

    1_实验二.docx

    - 调用`HttpServletRequest.getSession()`获取或创建Session。 - 使用`session.setAttribute(String name, Object value)`设置Session属性。 - 通过`session.getAttribute(String name)`获取Session属性。 - 当...

    ServletHttpSession DEMO

    创建Session** - `request.getSession()`:如果当前请求没有对应的Session,此方法将创建一个新的Session并返回。 - `request.getSession(true)`:与上面相同,但若不存在Session且创建失败(如禁用Cookie),会抛...

    JavaWeb开发技术-JSP隐式对象.pptx

    创建会话 `session = request.getSession();`,然后可以使用 `session.setAttribute("key", "value")` 存储数据,`session.getAttribute("key")` 获取数据,`session.invalidate()` 终止会话。 6. **application...

    JAVAWEB-10:会话技术之session&JSP

    - 当用户访问网页并提交登录信息后,服务器验证成功,即可调用`HttpSession session = request.getSession();`创建新的Session。 - 通过`session.setAttribute("key", "value");`将数据存入Session,其中"key"为键,...

    Java-翰子昂新闻发布系统源码-part1.docx

    HttpSession session = request.getSession(); // 创建用户对象 NewsUser user = new NewsUser(); // 获取用户名和密码 String username = request.getParameter("username"); String password = request....

    java-servlet-api.doc

    客户端的Session在此之前还不知道 客户端选择不加入Session,例如,如果客户端拒绝接收来自服务器的cookie 作为一个Servlet的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web...

    session过期时间设置

    默认情况下,Session可能会在服务器内存中长时间存储,消耗资源,同时也可能给不活跃的用户提供一种错觉,即他们仍然处于登录状态。为了避免这种情况,通常会设定一个合理的过期时间,一旦超过这个时间,Session就会...

    Cookie与Session机制

    - **创建Session** 在服务器端,使用`HttpSession session = request.getSession();`来创建一个新的Session,或者通过`request.getSession(true);`获取现有Session。如果不存在,会创建一个新的Session。 - **存取...

    获取SessionID

    - `getSession`方法通常在用户首次访问网站时创建Session,在后续访问中则直接获取已存在的Session。 2. **转换SessionID为八进制字符串**: - `Integer.toOctalString(hs.getId().hashCode())`:首先通过`hs....

    jsp中Session对象源码

    HttpSession session = request.getSession(); ``` 在 `getSession()` 背后,服务器会为每个用户分配一个唯一的会话ID,并将其存储在用户的Cookie或URL参数中。这样,当用户在网站上导航时,服务器可以通过这个ID...

Global site tag (gtag.js) - Google Analytics