了解Javas HttpSession

时间:2012-02-07 23:03:47

标签: session jetty httpsession

我对HttpSession有点问题。 我使用jetty 8并尝试实现嵌入式Web服务器。

出于测试目的,我创建了两个servlet:

  • FileServlet:它只处理静态内容的HTTP GET,如index.html,css 和其他静态文件并打印当前的会话ID 控制台:
  

System.out.println(“文件会话:”+ request.getSession(true).getId()   +“path”+ request.getPathInfo());

  • TestServlet:什么都不做,它只是在doGet(...)上的控制台上打印当前会话ID
  

System.out.println(“测试会话:”+ request.getSession(true).getId()   +“path”+ request.getPathInfo());

据我所知,Servlet必须是同一个ServletContext的一部分才能正确处理Sessions。所以我用这种方式以编程方式实现它:

Server server = new Server(8081);    
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
            servletContext.setContextPath("/");
            servletContext.addServlet(new ServletHolder(new FileServlet()),"/*");
            servletContext.addServlet(new ServletHolder( new TestServlet()),"/servlets/test");
server.setHandler(servletContext);

现在我启动我的网络浏览器(Chrome btw。)清除浏览器cookie和浏览器chache并加载我的测试网站http://localhost:8081/index.html,它还会请求加载其他静态文件,如css和js。

所以现在我得到了这个输出:

File session: ok49uty1mshn1fnhyle9ojh3n path /index.html
File session: 1fuxdd50woxwv1gl9r96dfdxgl path /css/style.css
File session: 1f6m5dkht4xja5ryj7dgd93wu path /css/Loading.css
File session: 1qizt3gnyy58uj0u46kofbxdf path /css/photo.css
File session: ikzpmgyew49uwxlnt8lr839m path /css/Login.css
File session: pg6p843xuqak1uwcc68q8wnxx path /js/script.nocache.js
File session: 1uv2jmvpu5u6s127rpc01ef8 path /js/script2.js

在加载index.html并嵌入index.html(css和js)中的所有其他资源后,我调用http://localhost:8081/servlets/test并看到此输出:

Test session: 1uv2jmvpu5u6s127rpc01ef8 path /servlets/test

所以在我看来,建立会话需要一些时间,我想知道为什么以及如何让由/index.html的HTTP GET创建的第一个会话成为每个进一步服务器交互的会话。这很奇怪。

我还做了第二个实验: 如前所述,我在加载/index.html之前清除了浏览器缓存和cookie。这次我重新加载页面而不清除缓存和cookie,现在它可以正常工作,换句话说,我希望如何工作:

File session: 1uv2jmvpu5u6s127rpc01ef8 path /index.html
File session: 1uv2jmvpu5u6s127rpc01ef8 path /css/style.css
File session: 1uv2jmvpu5u6s127rpc01ef8 path /css/Loading.css
File session: 1uv2jmvpu5u6s127rpc01ef8 path /css/photo.css
File session: 1uv2jmvpu5u6s127rpc01ef8 path /css/Login.css
File session: 1uv2jmvpu5u6s127rpc01ef8 path /js/script.nocache.js
File session: 1uv2jmvpu5u6s127rpc01ef8 path /js/script2.js

并且/ servlets / test也有相同的会话:

Test session: 1uv2jmvpu5u6s127rpc01ef8 path /servlets/test
编辑:我知道我的浏览器不会等到index.html完全加载并开始加载css和js同时...但我真的需要能够从第一个HTTP GET确定“真正的“会话”出于某些安全原因。有什么建议吗?

0 个答案:

没有答案