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种方案,选择哪一种犹豫不定,因为我是个初学者,写出来是想让大家多给提提意见。特此感谢!
分享到:
相关推荐
如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...
jsp课程中内置对象session,jsp教程中的上课源代码
这是一个用springMVC的项目 是一个监听器 用于监听session的创建、销毁、移除。会触发相应的事件处理
重写session机制,默认session是以临时文件形式存储在服务器,将session写入数据库,建表和注释写的都很清晰,已测试
//给一个session 变量赋值,如果该变量不存在即创建 echo $_SESSION['user_id'];//访问 session变量 $_SESSION = array();//清空所有session变量 session_destroy();//清除会话ID // session end // cookie ...
主要介绍了解决Spring session(redis存储方式)监听导致创建大量redisMessageListenerContailner-X线程问题,需要的朋友可以参考下
自己学习写的一个监听session各个操作,从session创建到消毁。
一个Demo告诉你struts2如何创建 request response session application
用户登录时,调用LoginServlet,将用户名写入application的在线用户列表中,用户退出时,调用LogoutServlet,调用session.invalidate(),交给HttpSessionListener的sessionDestroyed()方法,将用户从在线列表中删除。...
3、提前需要准备一个xshell的session模板文件,一般是自己在xshell中创建好的一个session ;还需要准备一个ip列表: IP列表的格式为 [aa] ip1 ip2 [bb] ip3 4、以上面的ip列表为例,生成的文件名为: ip1-aa.xsh ip...
创建索引的时候也会产生3,4级别的锁。 locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。 有主外键约束时 update / delete ... ; 可能会产生...
servlet 服务器监视所有的session创建,同时可以实现网站流量以及当前在线人数的统计
当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。...
下面我们就来介绍下PHP7中创建与销毁session的方法,希望对各位有帮助! PHP7中创建session和销毁session的方法 session可以保存任何的数据类型 1,开始session会话 session_start() 2,设置session $_SESSION['...
创建带时间戳的session值,以及设置token,网上找了好多的资源,都没有现成的,都是一点点拼凑起来的为什么一定要分数才行呢?免费共享不好吗?
简单的网上购物,将购买者的姓名、商品名保存在session对象中,实现一个web目录下的页面对session对象中信息的共享。要求创建三个页面,第一个页面输入用户的姓名,第二个页面输入购买商品名的名称,第三个页面实现...
session.socket.io, 在 socket.io 中,表示/连接会话 session.socket.io ( SessionSockets ) 这个小模块简化了 socket.io 使用express或者连接中间件的http会话的使用。 它没有依赖项,可以使用任何与表示或者连接...
可以简单告诉你session不是我们大都认为的在登录时候,通过request.getSession()产生的,而是你在首次访问一个应用时候,就已经产生了,这个在我的代码里有ActiveUserListener.java这个session创建的监听器....
1、Cookie和Session简介与区别Session信息是存放在...一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。3、Session的配置与应用4、用Cookie和Session做登陆