Введение сеанса
Сеанс относится к процессу взаимодействия между пользователем, использующим тот же процесс браузера и веб -приложением в течение определенного периода времени.
Сеансы обычно используются для отслеживания статуса пользователя и кэширования информации пользователя в этом процессе браузера.
Когда пользователь закрывает браузер, предыдущий сеанс не может быть получен снова (случай, когда максимаж cookie составляет -1). Откройте новый браузер снова, и начнется новая сессия.
класс javax.servlet.http.httpsession. Каждый httpsession представляет сеанс пользователя.
Время истечения срока каждого сеанса по умолчанию составляет 30 минут.
Когда браузер сначала обращается к серверу, независимо от того, какая страница он сначала посещает, сервер назначит пользователю уникальный идентификатор сеанса, то есть JSessionId, а затем вернет его пользователю в виде cookie.
На следующем рисунке является заголовок ответа (следующее рисунок основан на сервлете 3.0, и в сервисе 2.5 нет атрибута Httponly.
Сервер создает сеанс для каждого пользователя, а именно объект HTTPSession, и сохраняет его на стороне сервера.
Итак, когда пользователь снова обращается к серверу, как сервер узнает или текущего пользователя?
Когда браузер снова обращается к серверу, он будет нести файл cookie, содержащий JSessionId для доступа к серверу. Сервер возвращает объект HTTPSession этого пользователя на основе этого идентификатора и поддерживает сеанс.
(Итак, возможно ли реализовать один и тот же сеанс в разных браузерах?
Вот типичный URL, который обладает определенным эффектом обзора и может реализовать один и тот же сеанс в разных браузерах:
http: // localhost: 8080/day07_2/cncookieservlet; jsessionid = f8692d61cd46d094dbb7a8fc7387649c)
Отношения между браузером и сервером следующие:
Httpsession:
В сервлете объект сеанса получается с помощью метода httpservletrequest.getSession.
Следующие методы интерфейса httpsession используются для обмена данными на сеанс:
getattribute ("name") setattribute ("name", object); getAttributeNames () removeAttribute ("name")Недействителен (); - Этот метод сильно удаляет сеанс кэшированного сервера.
Пример:
Setattribute в Httpsession of сервлета.
Перейдите в другой сервлет через HyperConnect или иным образом и отобразите информацию через GetAttribute.
Позвоните в GetatTribute в любом сервлете, чтобы отобразить информацию.
Закройте этот браузер и пересмотрите сервлет, который получает информацию, и вы обнаружите, что информации больше нет.
следующее:
String name = request.getParameter ("name"); request.setattribute ("name", "request ---"+name); request.getSession (). setattribute ("name", "session ---"+name); getServletContext (). SetAtTribute ("name", "Application ---"+name); Уникальный идентификатор сеанса:
Каждый сеанс имеет уникальный идентификатор, а именно удостоверение личности.
Когда браузер получает новый сеанс, пользователь может распечатать значение идентификатора через session.geid ().
Не закрывая браузер, прыгая на нескольких страницах, используя один и тот же сеанс.
нравиться:
request.getSession (). getId ()
Что такое безопасный выход:
Когда пользователь выходит, он должен очистить свою информацию из сеанса, то есть безопасно выходить.
Secure Exit - это очистить информацию, которую вы оставляете на сервере, чтобы предотвратить ее взломан.
Session.invalidate ();
1. request.getSession (). Invalidate ();
Это позволяет удалить соответствующие объекты в пуле сеанса.
2. Session.RemoveatTribute (…)
нравиться:
request.getSession (). RemoveAttribute ("RealCode");
Используется для удаления атрибутов в объектах сеанса
Отслеживайте сессию, переписывая URL:
Как упоминалось ранее, контейнер сервлета сначала сохраняет сеанс на клиенте. Позже, когда браузер выдает HTTP -запрос, он будет содержать этот SessionID. Контейнер сервлета считывает SessionID в HTTP -запросе и извлекает объект HTTPSession из контейнера на основе этого SessionID, чтобы облегчить отслеживание, к какому сеансу принадлежит HTTP -запрос. Этот процесс называется отслеживание сеансов.
Если браузер поддерживает файлы cookie, контейнер сервлета сохраняет SessionID в качестве cookie на клиенте браузера. Но если пользователь отключает файлы cookie по соображениям безопасности, как может отслеживать контейнер сервлета?
Сначала давайте отключим файлы cookie в IE (примечание: он не работает для некоторых систем призраков).
Т.е.> Инструменты> Параметры Интернета> Конфиденциальность> расширенная, а затем отключить файлы cookie:
Мы можем добавить такую гиперссылку на домашнюю страницу: (я ставлю код, связанный с Saveservlet.java getservlet.java logoutservlet.java logoutservlet.java в следующем коде)
<h2> демонстрируйте технологию перезаписи URL ----- раздвигая проблему, согласно которой наш сеанс недействителен после того, как пользователь отключает файлы cookie </h2> <form action = "< %= response.encodeurl (" Saveservlet ") %>" method = "> name: <input type =" text "name"/> <br/> <input ypect = "> </> </form> href = "< %= response.encodeurl (" getservlet ") %>"> переписать данные URL-чтение в нескольких контейнерах </a> <br/> <a href = "< %= response.encodeurl (" logoutservlet ") %>"> rewrite url-safe exit </a>Это предложение <form action = "<%= response.encodeurl ("/aa ")%>"> может реализовать эту функцию
После отключения файлов cookie здесь браузер все еще может получать файлы cookie, отправленные сервером, но браузер может принять их только и не может отправить их на сервер. Если файлы cookie не могут быть отправлены, он не может перейти в пул сеансов, чтобы получить соответствующий объект.
После ввода желаемого значения в форме перейдите к гиперссылке в Getservlet ниже, чтобы увидеть, может ли входное значение все еще отображаться. Ответ да. Путь доступа здесь похож
http: // localhost: 8080/day07_2/cncookieservlet; jsessionid = f8692d61cd46d094dbb7a8fc7387649c, jsessionId = f8692d61cd46d094dbb7a8fc7387649c spate. Таким образом, вы можете получить к нему доступ, введя этот URL в другом браузере.
Здесь я хочу добавить: (Следующая ситуация заключается в том, что когда я пишу объект httpsession в пуле сеанса, значение jsessionId и ценность соответствующего сеанса в печенье. Это печенье перезаписывает тот, который создан системой, что эквивалентно для создания самого. Я установил время существования до десяти минут.
В двух случаях независимо от того, отключены ли куки, идентификаторы вновь созданных объектов в пуле сеанса различны. То есть, если вы введете значение имени в форме, когда файлы cookie отключены, результат запроса выглядит следующим образом:
И jsessionId - 2BB51EBDEAAF14D19656C71E1B6F9FF6
Затем немедленно перейдите в режим cookie, не отключая его, введите другое имя, такое как Tom, и результат запроса, естественно, будет два Tom, а JsessionId
203F9E4DB5D8744476B81DAF350661B6A, который отличается от отключения, что делает появление следующих результатов.
Затем в это время мы закрываем браузер, снова войдем в браузер и просмотрим результаты доступа, не отключая режим cookie, следующим образом:
Я опубликую основной код ниже:
Saveservlet.java
Пакет cn.hncu.servlets.session; импортировать java.io.ioexception; Импорт java.io.printwriter; Импорт javax.servlet.servletexception; Импорт javax.servlet.http.cookie; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Общедоступный класс Saveservlet расширяет httpservlet {public void Doget (httpservletrequest запрос, httpservletresponse response) throws servletexception, ioexception {dopost (запрос, ответ); } public void dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); request.setcharacterencoding ("UTF-8"); String name = request.getParameter ("name"); request.setattribute ("name", "request ---"+name); request.getSession (). setattribute ("name", "session ---"+name); getServletContext (). SetAtTribute ("name", "Application ---"+name); // Пример объединения технологии и технологии сессии cookie для приложения -※ Функция: После закрытия браузера, если пользователь может войти на этот сайт в течение 10 минут, он также может получить доступ к информации в сеансе // написать cookie с ключом «jsessionId» и значения в качестве сеанса для клиента. Cookie c = new cookie ("jsessionid", request.getSession (). GetId ()); C.SetMaxage (60*10); // Приведенное выше явление вызвано этим предложением. Без этого предложения не будет такого явления, как упомянуто выше C.setpath (request.getContextPath ()); response.addcookie (c); out.println ("Сохранить успешно ..."); out.flush (); out.close (); }}Getservlet.java
Пакет cn.hncu.servlets.session; импортировать java.io.ioexception; Импорт java.io.printwriter; Импорт javax.servlet.servletexception; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; открытый класс GetServlet расширяет httpservlet {public void doget (httpservletrequest-запрос, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<head> <Title> a Servlet </title> </head>"); out.println ("<body>"); String reqName = (string) request.getAttribute ("name"); String sename = (string) request.getSession (). Getattribute ("name"); String appName = (string) getServletContext (). GetAttribute ("name"); out.println (reqname+"<br/>"); out.println (sename+"<br/>"); out.println (appname+"<br/>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}LogoutServlet.java
Пакет cn.hncu.servlets.session; импортировать java.io.ioexception; Импорт java.io.printwriter; Импорт javax.servlet.servletexception; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Общедоступный класс LogoutServlet Extens Httpservlet {public void Doget (httpservletrequest-запрос, httpservletresponse response) throws servletexception, ioException {response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); // Безопасный выход --- до тех пор, пока объект сеанса является недействительным request.getSession (). Invalidate (); out.println ("Безопасный выход ..."); }}Выше приведено управление сеансом Javaweb, введенное вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение. Редактор ответит вам вовремя!