`
zhoujianghai
  • 浏览: 439114 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于session的创建时间

阅读更多
今天看了Cookie和Session专题,里面讲到了session的创建时间。说直到server端调用HttpServletRequest.getSession(true)时才会创建session,并不是一有客户端访问时就创建。针对这一问题,以前也没深入研究,于是今天做了一个实验。如下所示:
TestServlet:
public class Test extends HttpServlet {

protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("test");
}

}

SessionListener:
public class SessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent arg0) {

System.out.println("session is created");

}

public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("session is destory");

}

}

当在浏览器中访问TestServlet时,并没有打印出session is created,说明此时session没有被创建,如果在TestServelt中加上HttpSession session = request.getSession(true);这句时,tomcat控制台打印出打印出session is created,说明此时已经创建了session。
而jsp和servlet也有不同的处理方式,我重启服务器,在浏览器访问index.jsp时,后台打印出了打印出session is created,说明客户端第一次访问jsp页面时就创建了session,原因是jsp的内置对象session,当容器把jsp翻译成servlet类时,会生成pageContext.getSession()代码。
下面是jsp对应servlet的部分源码
  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;.....


    try {
      response.setContentType("text/html;charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
......}

当我访问静态页面index.html时,session并没有创建。
分享到:
评论
2 楼 zhoujianghai 2011-03-24  
祝建国 写道
楼主,我专门查了相应的API,pageContext并不会创建session,这个一直是我的疑惑

pageContext有个getSession方法额,应该是在这个时候创建的吧,很久没做web了,很多知识点忘记了
1 楼 祝建国 2011-03-22  
楼主,我专门查了相应的API,pageContext并不会创建session,这个一直是我的疑惑

相关推荐

    Java关于session的详细解释

    ### Java关于Session的详细解释 #### 一、Session的基本概念 在Java Web开发中,Session是一种常用的技术,用于跟踪用户的会话状态。简单来说,Session就是服务器为特定用户分配的一块内存区域,用来存储该用户在...

    关于session丢失问题

    当用户登录网站后,服务器会为该用户创建一个唯一的Session ID,并将其存储在服务器端,通常是在内存中。然后,这个Session ID会通过Cookie或者URL重写等方式返回给客户端。在后续的请求中,客户端携带这个Session ...

    session过期时间设置

    通过这种方式,每当Session创建或销毁时,相应的回调方法会被调用,从而允许我们对Session的生命周期进行控制和管理。 总结来说,Session过期时间的设置是一项关键的安全和性能优化措施。通过编程、配置文件或应用...

    监听session的创建到销毁

    - **统计在线用户**:通过监听Session创建和销毁,可以实时统计网站上的在线用户数量。 - **资源释放**:在Session销毁时,可以清理与之关联的数据库连接或其他资源。 - **安全控制**:检测长时间未活动的Session...

    关于session.doc

    ### 关于Session机制详解 #### 一、术语Session 在计算机科学领域,特别是Web开发中,“session”这个词的含义较为复杂且多变。通常我们提到的“session”是指客户端与服务器之间的一次交互过程,这一过程可以持续...

    session session session szsessdifn

    当用户首次访问网站时,服务器会为该用户创建一个唯一的Session ID,并将其存储在服务器的内存中。这个ID随后通过Cookie或者URL重写等方式返回给客户端。每次客户端请求服务器时,都会携带这个Session ID,服务器...

    关于session的详细解释.pdf

    关于Session的详细解释 在深入探讨Session机制之前,我们首先明确Session的概念及其在网络通信和Web开发中的作用。Session,常被译作“会话”,原意指一系列有始有终的动作或消息交换过程,例如打电话从拨号到挂断...

    解决Spring session(redis存储方式)监听导致创建大量redisMessageListenerContailner-X线程问题

    在本文中,我们主要探讨了在使用Spring Session以及Redis作为存储方式时,由于消息监听导致创建大量线程的问题及其解决方案。我们将从Spring Session的基础知识、Redis在Spring Session中的作用、监听机制导致线程...

    session之用户交互间隔&&session持久化

    在 Java Web 应用中,可以通过 `HttpSession` 接口中的 `getLastAccessedTime()` 和 `getCreationTime()` 方法来获取用户交互间隔和 Session 创建时间。 #### 4.1 获取用户交互间隔 - **`getCreationTime()`**:...

    jsp中Session对象源码

    首先,`Session` 对象的创建通常发生在用户第一次访问受保护的资源时。服务器通过 `HttpServletRequest` 对象的 `getSession()` 方法来创建一个新的 `HttpSession` 实例。如果当前会话不存在,该方法会创建一个新的...

    JSP实验-购物车(用session实现)

    - **添加商品:** 当用户点击“加入购物车”按钮时,JSP页面会获取商品信息,创建一个JavaBean对象,并将它放入Session。如果Session中已经存在该商品,那么就更新数量。 - **显示购物车:** 用户可以查看购物车中...

    php中精确控制session超时时间

    5. **自定义session存储处理**:如果以上方法仍无法满足需求,可以考虑自定义session存储处理器,通过实现`session_set_save_handler()`函数来自行管理session的创建、读取、写入和销毁过程,从而更好地控制session...

    Jsp内置对象session总结

    6. 取得用户最后一次操作的时间: 方法:`public long getLastAccessedTime()`, 用户在线时间 = Session 最后一次操作时间 - Session 创建时间。 Session 与 Cookie 的区别 Session 将信息保存在服务器上,而 ...

    报表session与应用session常识普及

    每个用户访问网站时,服务器都会为该用户创建一个唯一的会话标识(session ID),通过这个标识可以在多次请求之间共享数据。系统session和报表session是两个独立的概念,它们在Web服务器下共存时,不会发生冲突,...

    session生命周期的设置

    3. **Session监听器**:通过实现HttpSessionListener或HttpSessionAttributeListener接口,可以在Session创建、销毁或属性变化时执行特定操作。 4. **及时清理Session**:为了避免内存泄漏,开发者应合理设计...

    关于session与cookie的原理简述

    【Session与Cookie原理简述】 Session和Cookie是两种在Web开发中常见的用户状态管理机制,它们主要用于在HTTP协议无状态的特性下跟踪用户状态。理解它们的原理对于编写高效的Web应用至关重要。 **Cookie原理** ...

    sessionsession

    销毁Session通常有两种方式:一是通过编程方式调用session.invalidate()方法,二是服务器设置的Session超时时间到达,服务器会自动清理过期的Session。 3. **Session的存储** Session数据存储在服务器的内存中,...

    session监听小例子

    Session监听器是Servlet API提供的一种机制,允许开发者对Session的生命周期事件进行监听和处理,比如Session创建、更新、失效等。下面,我们将深入探讨Session监听及其在实际应用中的作用。 首先,我们需要了解...

    判断session过期的方式

    // 获取当前Session的创建时间 long sessionCreationTime = session.getLastAccessedTime(); // 设置的Session过期时间为30分钟 long sessionTimeout = 30 * 60 * 1000; // 单位为毫秒 if ((System....

Global site tag (gtag.js) - Google Analytics