Понимание Javas HttpSession - PullRequest
       19

Понимание Javas HttpSession

1 голос
/ 08 февраля 2012

У меня небольшая проблема с HttpSession.Я использую Jetty 8 и пытаюсь реализовать встроенный веб-сервер.

Для целей тестирования я создал два сервлета:

  • FileServlet: он просто обрабатывает HTTP GET для статического содержимого, например индекса.html, css и другие статические файлы и печатает текущий идентификатор сеанса на консоли:

System.out.println ("Файловый сеанс:" + request.getSession (true) .getId() + "путь" + request.getPathInfo ());

  • TestServlet: ничего не делает, он просто печатает идентификатор текущей сессии на консоли в doGet (...)

System.out.println ("Тестовый сеанс:" + request.getSession (true) .getId () + "путь" + request.getPathInfo ());

Насколько я знаю, сервлеты должны быть частью одного и того же ServletContext, чтобы правильно обрабатывать сеансы.Поэтому я реализую это программным способом следующим образом:

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), очищаю браузеры, файлы cookie и браузеры чаю и загружаю свой тестовый сайт 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

Так что мне кажется, что требуется некоторое время, чтобы установить сеанс, и мне интересно, почему и какпусть первый сеанс, который был создан HTTP GET из /index.html, будет сеансом для каждого дальнейшего взаимодействия с сервером.Это очень странно.

Я также провожу второй эксперимент: как я уже говорил, я очистил кеш браузера и куки перед загрузкой /index.html.На этот раз я перезагружаю страницу без очистки кеша и куки, и теперь она работает правильно или, другими словами, как я ожидаю работать:

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 ПОЛУЧИТ «настоящий» сеанс по некоторым причинам безопасности.Есть предложения?

...