今天看了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并没有创建。
分享到:
相关推荐
初学者可以学习一下,jsp写的购物车,没用到什么高深技术 我是用Eclipse+MyEclipse的,如果是用NetBeans的朋友新建一个项目,再把源文件和JavaBean复制过去相应位置
可以简单告诉你session不是我们大都认为的在登录时候,通过request.getSession()产生的,而是你在首次访问一个应用时候,就已经产生了,这个在我的代码里有ActiveUserListener.java这个session创建的监听器....
创建带时间戳的session值,以及设置token,网上找了好多的资源,都没有现成的,都是一点点拼凑起来的为什么一定要分数才行呢?免费共享不好吗?
Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此Session销毁,客户端再一次与服务器交互时之前的Session就不存在了。 设置Session超时时间...
服务器在用户首次访问时为其创建一个唯一的会话标识符(Session ID),并将该标识符存储在服务器上。客户端在后续的请求中会将该 Session ID 作为 Cookie 发送给服务器。服务器使用 Session ID 来获取对应的用户信息...
复制代码 代码如下:<?...Zend_Loader::loadClass(“Zend_Session_Namespace”);$Session = new Zend_Session_Namespace(‘Db’);$Session ->host = ‘127.0.0.1’...//定义会话过期时间$Session ->setExpirationSecond
本文较为详细的比较了php中...4、保存时间(生命周期),以20分钟为例 cookie的生命周期是累计的,从创建时就开始计算,20分钟后生命周期就结束,即cookie无效; session的生命周期是间隔的。从创建时开始计时,如果
1)创建Cookie: Cookie cookie = new Cookie(String cookieName,String cookieValue); 示例: Cookie cookie = new Cookie("username","zhangsan"); 那么该cookie会以响应头的形式发送给客户端: 注意:Cookie中...
Oracle 创建 Job 实例是指在 Oracle 数据库中创建一个计划任务,用于在特定的时间点执行特定的操作。以下是创建 Job 实例的详细过程和相关知识点: 一、创建 Job 实例 要创建一个 Job 实例,需要使用 dbms_job....
偶然发现Tomcat会话时间的半小时,并不是说会话创建后,只有半小时的有效使用时间,而是说会话空闲半小时后,会被删除。索性就翻了一下源码。做了一番整理。 注:空闲时间,指的是同一个会话两次请求之间的间隔时间 ...
Django会话清理对于使用cached_db或db会话引擎的项目,一段时间后django_session表可能会变得很大。 Django提供了“ cleanup”管理命令,用于从此表中删除过期的会话,但是您必须手动运行此命令或设置cron作业。 ...
对于数据库运维人员来说创建session或者查询时产生问题是常规情况,下面介绍一种很有效且不借助第三方工具的方式来解决类似问题。 最近开始接触运维工作,所以自己总结一些方案便于不懂数据库的同事解决一些不太紧要...
会话管理器概述会话管理器实现,有助于开发令牌基础系统。 它还可以生成刷新令牌,访问令牌和一些安全检查。 生成的令牌可用于验证用户或连接的系统,并且具有到期时间,对于具有较短生存时间的访问令牌,您... 创建
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。 PHPSESSIONID的生产算法原理如下: hash_func = md5 / sha1 #可由php.ini...
主要介绍了php自定文件保存session的方法,详细讲述了session创建与使用的技巧,以及对应的作用范围分析,具有一定的参考借鉴价值,需要的朋友可以参考下
具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的 ...当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识 (称为session id),
显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: 可...
2.session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是...
secureCRT其实也是一款很强大的终端工具,良许也使用过它很长时间,但是,它毕竟是收费软件,在公司里不允许使用。而且在良许自己的电脑里一量输入大写,整个界面就乱了(原因未知,未深究),这是直接导致良许放弃...