`

谁在创建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)。
分享到:
评论

相关推荐

    自己实现的spring-session

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

    java-servlet-api.doc

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

    session、cookie的跨域共享

    可以简单告诉你session不是我们大都认为的在登录时候,通过request.getSession()产生的,而是你在首次访问一个应用时候,就已经产生了,这个在我的代码里有ActiveUserListener.java这个session创建的监听器....

    jsp基础精华详解

    HttpSession session = request.getSession(); session.setAttribute("name", "zhangsan"); session.setAttribute("pwd", "aaa"); String name = (String) session.getAttribute("name"); 2.cookie: //创建Cookie ...

    采用ajax实现的图片验证码

    request.getSession().setAttribute("code",code);//把生成的验证码信息,存储到session中,登录的时候,用来作判断 -------------------------------------产生干扰线条 for(int i=0;i;i++){ int x1 = rd....

    POI导入导出EXCEL文件.(struts 1.x and struts2.x).doc

    request.getSession().setAttribute("Download", outputFile); } catch (Exception ioexception) { request.setAttribute("message", "创建文件失败!"); return actionMapping.findForward("outJSP"); } ...

    jxl Java导出Excel文件jar 包

    HttpSession session = request.getSession(); //读取学生集合 List<Student> students = (List) session .getAttribute("students"); //读取学生编号集合 List<String> stuid =(List<String> )...

    cookie中用字符串方式存储session信息实现的购物车模块

    购物车案例: 基本设计思想: (1)使用session机制,保存用户... (1)创建Session: request.getSession(); (2)创建Cart,并且将Cart放到session (3)调用Cart的方法,完成请求;也会调用 ComputerDAO完成数据库操作

    [C#]统计在线人数

    //直接在这里设定、或从配置文件中读取配置参数 ///存放用户名的Session名 USERNAME = "UserName"; ///多少分钟不活动的用户从在线列表中删除 OFFLINEDIFF = 5; ///多少秒执行一次删除不活动用户 REMOVEDIFF ...

    jsp九大内置对象

    1、Request对象  该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以  获取用户提交的信息。  当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行...

    JSP100选择题 JSP100选择题 适合考前练习

    1 J2EE 中,()类的()方法用于创建对话。(选择一项) a) HttpServletRequest、getSession b) HttpServletResponse、newSession c) HtttpSession、newInstance d) HttpSession、getSession 2 给定一个 ...

    springmybatis

    1. 在MyBatis 里面创建两个源码目录,分别为 src_user,test_src, 用如下方式建立,鼠标右键点击 JavaResource. 2. 设置mybatis 配置文件:Configuration.xml, 在src_user目录下建立此文件,内容如下: 程序代码 程序...

    基于SpringMVC annotation 的图形验证码

    基于SpringMVC annotation ... HttpSession session = request.getSession(true); session.setAttribute("randCheckCode", sRand); g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream()); } }

    Nginx+Tomcat负载均衡

    <%out.print(request.getSession()) ;%> <!--输出session--> <%out.println(request.getHeader("Cookie")); %> <!--输出Cookie--> </body> </html> 之后再实现session共享 我查的资料中有...

    J2EE面试题

    c) Session mailsession = request.getSession(); d) Session mailsession= request.getInstance(objProperties); 参考答案 b 3) 下面是一JSP页面的代码,请问输出结果是(). <html> ! int I =1; %> ; %> ...

    java 面试题 总结

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    struts 标签 logic:iterate使用 logic:iterate

    // 组织sql并执行 HttpSession session_account = request.getSession(); String account = (String) session_account.getAttribute("account"); String sql = "select * from account ...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    jsp内置对象的用法

    1 long getCreationTime() 返回SESSION创建时间 2 public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号 3 long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间 4 int ...

    千方百计笔试题大全

    106、HttpSession session = request.getSession() 24 107、getParameter与 getAttribute的区别? 24 108、以下哪一个不是赋值符号? 25 109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下...

Global site tag (gtag.js) - Google Analytics