`
eggbucket
  • 浏览: 186584 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

session什么时候被创建

 
阅读更多

session什么时候被创建
*************************************************************************************
一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用HttpServletRequest.getSession(true)这样的语句时才会被创建。
*************************************************************************************

我一开始还不信,做个试验我信了。

        一开始不信是因为,用 FireFox 测试清空了Cookie ,只要一跑一个jsp ,马上会看到生成了一个名字是 JSESSIONID 的Cookie ,注意这个是  Session Cookie (会话Cookie),不是 Persistent Cookie (持久Cookie),这个《Cookie和Session专题 》一文中讲的很明白,会话 Cookie 是为实现 session 机制而采用的在 Client 端与 Server 端之间保持状态的解决方案之一,在默认情况下是保存在 Client 端内存中的。注意:会话 Cookie 的“会话”这里不是指 Server 端的 Session ,而是指的是浏览器,所以会话 Cookie 的生命周期不是与 Server 端的 Session 那个会话相同,而是与浏览器相同,就是说只要开着浏览器会话 Cookie 就存在,关闭浏览器它就过期了。但是会话 Cookie 的值是与 Server 端的 SessionId 对应相同的。就是说会话Cookie随着Server端Session的创建而创建,但并不随着Session的过期而过期,而是随着Client端的浏览器关闭而销毁。 这说明只要会话Cookie 出现了,Server 端的 Session 就已经创建了。

        我一开始的错误想法是:我的 jsp 里没有 HttpServletRequest.getSession(true) 的代码阿,但是 JSESSIONID 的Cookie 出现了就说明 Server 端 Session 创建了,这与《Cookie和Session专题 》上面讲的不符啊,不过马上想通了,jsp 属于动态页,本质就是一个 Servlet ,编译后的 jsp 是要到 Server 端进行交互的(即便 jsp 里没写一句交互的代码),因为 jsp 里有内置对象,内置对象就是和 Server 交互的产物,所以如果你的首页是个 jsp 页的话,即便没有HttpServletRequest.getSession(true),Session 也会创建。

        如果首页是*.html 就不同了,再将 FireFox 的 Cookie 都清除了,将首页设置为 index.html, 回车,查看,果然这次没有JSESSIONID 的 Cookie 生成,这说明Server的Session也没有创建,让 index.html 提交到一个Servlet, 确实可以证明没有 HttpServletRequest.getSession(true) ,Sesion是不会创建的, 即便Servlet又转发(或者重定向)到第二个页,只要第二个页依然不是jsp页,Session就依然不会创建,FireFox 当然也没有名字为 JSESSIONID 的 Cookie 生成。

        那么我以前一直错误地认为当某个Client端请求开始时,Session就创建了,此后Session就一直存在直到过期,而request在当前Client的一系列请求操作中有可能销毁和新建,所以Session的生命周期要比request长。现在看来这么想大错特错了,Session和Request的生命周期根本就是火星和地球,拿来相比是没有任何意义的。好像是在问鲨鱼和老虎PK谁会赢,没有意义的问题. . .

        想起研究Session和Cookie是因为单位最近一个项目在做登录系统时遇到些问题,类似单点登录、Session过期、客户信息安全、Cookie使用等,下一片想些这些,我想到了3到4种方案,选择哪一种犹豫不定,因为我是个初学者,写出来是想让大家多给提提意见。特此感谢!

分享到:
评论
1 楼 在世界的中心呼喚愛 2013-11-13  
楼主,现在再看这篇文章,还是这样感悟?

相关推荐

    jsp中Session对象源码

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

    session session session szsessdifn

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

    监听session的创建到销毁

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

    自己实现的spring-session

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

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

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

    报表session与应用session常识普及

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

    sessionsession

    Session的工作原理是,当用户访问服务器并进行登录或其他需要记录状态的操作时,服务器会在内存中创建一个唯一的Session ID,并将其发送给浏览器。这个Session ID通常以Cookie的形式存储在客户端。之后,每当客户端...

    session对象存储

    首先,我们需要理解什么是Session。在Web应用中,每当用户打开一个网站并进行交互时,服务器都会为这个用户创建一个唯一的Session ID,这个ID会通过Cookie或者URL重写等方式返回给客户端。当用户再次发送请求时,...

    HttpSessionListener监听session的创建及销毁,实现在线用户统计

    用户登录时,调用LoginServlet,将用户名写入application的在线用户列表中,用户退出时,调用LogoutServlet,调用session.invalidate(),交给HttpSessionListener的sessionDestroyed()方法,将用户从在线列表中删除。...

    Jsp内置对象session总结

    Session 对象是一个 JSP 内置对象,它在第一个 JSP 页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。 Session 对象的 Id ...

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

    #### 3.1 什么是 Session 持久化 Session 持久化是指将 Session 数据从内存中持久化到硬盘或者其他持久化存储中,这样即使服务器重启,Session 信息也不会丢失。这对于提高系统的可用性和用户体验非常重要。 #### ...

    Hibernate-nosession

    首先,理解什么是Hibernate Session。Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作,如保存、更新、删除和查询等。Session通常在一个事务中打开并在事务结束时关闭,...

    session监听小例子

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

    js操作session例子

    当用户访问网站时,服务器会为每个用户创建一个唯一的Session ID,并将其通过Cookie返回给浏览器。之后,浏览器在每次发送请求时都会带上这个Session ID,服务器根据ID找到对应的Session数据。 在JavaScript中,...

    session实验

    这个Session ID随后会被发送到客户端(通常是通过Cookie),客户端在后续的每次请求时都会携带这个Session ID。服务器通过检查这个ID来识别出特定的用户,从而获取并维护用户的会话信息,如登录状态、购物车内容等。...

    jsp和servlet之中的session详细介绍

    通常,当服务器首次接收到包含session ID的请求,或者首次调用`getSession()`方法且当前没有活动session时,session会被创建。 2. session 何时被删除 session可能在以下情况被删除: - 用户关闭浏览器,浏览器...

    NET的csharp的session丢失sessionid不一样

    这涉及到创建一个新的类来实现`System.Web.SessionState.SessionStateStoreProviderBase`接口,并重写其中的一些方法以满足特定的需求。这种方式更为复杂,但在某些场景下可能更为有效。 4. **检查浏览器设置**: ...

    判断session过期的方式

    当Session被废弃或过期时,监听器的`sessionDestroyed()`方法会被调用。这可以用来实现自动清理过期Session的功能。以下是一个简单的Session监听器示例: ```java @WebListener public class SessionListener ...

Global site tag (gtag.js) - Google Analytics