JSP - обработка файлов cookie

В этой главе мы обсудим обработку файлов cookie в JSP. Файлы cookie - это текстовые файлы, которые хранятся на клиентском компьютере и хранятся для различных целей отслеживания информации. JSP прозрачно поддерживает файлы cookie HTTP с использованием базовой технологии сервлетов.

Идентификация и возвращение пользователей состоит из трех этапов:

  • Сценарий сервера отправляет в браузер набор файлов cookie. Например, имя, возраст или идентификационный номер и т. Д.

  • Браузер сохраняет эту информацию на локальном компьютере для использования в будущем.

  • Когда в следующий раз браузер отправляет какой-либо запрос на веб-сервер, он отправляет эти файлы cookie на сервер, и сервер использует эту информацию для идентификации пользователя или может использоваться для других целей.

В этой главе вы узнаете, как установить или сбросить файлы cookie, как получить к ним доступ и как удалить их с помощью программ JSP.

Анатомия печенья

Файлы cookie обычно устанавливаются в заголовке HTTP (хотя JavaScript также может устанавливать файлы cookie непосредственно в браузере). JSP, который устанавливает cookie, может отправлять заголовки, которые выглядят примерно так:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT; 
   path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html

Как видите, Set-Cookie header содержит a name value pair, a GMT date, a path и a domain. Имя и значение будут закодированы в URL. Вexpires поле - это инструкция браузеру, чтобы "forget" файл cookie после указанного времени и даты.

Если браузер настроен на хранение файлов cookie, он будет хранить эту информацию до истечения срока действия. Если пользователь указывает браузеру на любую страницу, которая соответствует пути и домену cookie, он повторно отправит cookie на сервер. Заголовки браузера могут выглядеть примерно так:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126

Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz

Затем сценарий JSP получит доступ к файлам cookie через метод запроса. request.getCookies()который возвращает массив объектов Cookie .

Методы файлов cookie сервлета

В следующей таблице перечислены полезные методы, связанные с объектом Cookie, которые вы можете использовать при управлении файлами cookie в JSP.

S.No. Метод и описание
1

public void setDomain(String pattern)

Этот метод устанавливает домен, к которому применяется файл cookie; например, tutorialspoint.com.

2

public String getDomain()

Этот метод получает домен, к которому относится файл cookie; например, tutorialspoint.com.

3

public void setMaxAge(int expiry)

Этот метод устанавливает, сколько времени (в секундах) должно пройти до истечения срока действия cookie. Если вы не установите это значение, cookie будет сохраняться только в течение текущего сеанса.

4

public int getMaxAge()

Этот метод возвращает максимальный возраст файла cookie, указанный в секундах. По умолчанию -1 это означает, что файл cookie будет сохраняться до завершения работы браузера.

5

public String getName()

Этот метод возвращает имя файла cookie. Имя не может быть изменено после создания.

6

public void setValue(String newValue)

Этот метод устанавливает значение, связанное с файлом cookie.

7

public String getValue()

Этот метод получает значение, связанное с файлом cookie.

8

public void setPath(String uri)

Этот метод устанавливает путь, к которому применяется этот файл cookie. Если вы не укажете путь, cookie будет возвращен для всех URL-адресов в том же каталоге, что и текущая страница, а также для всех подкаталогов.

9

public String getPath()

Этот метод получает путь, к которому применяется этот файл cookie.

10

public void setSecure(boolean flag)

Этот метод устанавливает логическое значение, указывающее, следует ли отправлять cookie только через зашифрованные (т. Е. SSL) соединения.

11

public void setComment(String purpose)

Этот метод определяет комментарий, описывающий назначение файла cookie. Комментарий полезен, если браузер представляет пользователю файл cookie.

12

public String getComment()

Этот метод возвращает комментарий, описывающий назначение этого файла cookie, или null, если файл cookie не имеет комментария.

Настройка файлов cookie с помощью JSP

Настройка файлов cookie с помощью JSP включает три шага:

Шаг 1. Создание объекта Cookie

Вы вызываете конструктор Cookie с именем cookie и значением cookie, оба из которых являются строками.

Cookie cookie = new Cookie("key","value");

Имейте в виду, что ни имя, ни значение не должны содержать пробелов или каких-либо из следующих символов -

[ ] ( ) = , " / ? @ : ;

Шаг 2: Установка максимального возраста

Ты используешь setMaxAgeчтобы указать, как долго (в секундах) файл cookie должен быть действительным. Следующий код установит cookie на 24 часа.

cookie.setMaxAge(60*60*24);

Шаг 3. Отправка файла cookie в заголовки ответа HTTP

Ты используешь response.addCookie чтобы добавить файлы cookie в заголовок ответа HTTP следующим образом

response.addCookie(cookie);

пример

Давайте изменим наш Пример формы, чтобы установить файлы cookie для имени и фамилии.

<%
   // Create cookies for first and last names.      
   Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
   Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
   
   // Set expiry date after 24 Hrs for both the cookies.
   firstName.setMaxAge(60*60*24); 
   lastName.setMaxAge(60*60*24); 
   
   // Add both the cookies in the response header.
   response.addCookie( firstName );
   response.addCookie( lastName );
%>

<html>
   <head>
      <title>Setting Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Setting Cookies</h1>
      </center>
      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>
   
   </body>
</html>

Давайте поместим приведенный выше код в main.jsp файл и используйте его на следующей HTML-странице -

<html>
   <body>
      
      <form action = "main.jsp" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
      
   </body>
</html>

Сохраните вышеуказанный HTML-контент в файле hello.jsp и положи hello.jsp и main.jsp в <Tomcat-installation-directory>/webapps/ROOTкаталог. Когда вы получите доступhttp://localhost:8080/hello.jsp, вот фактический результат вышеуказанной формы.

Попробуйте ввести имя и фамилию, а затем нажмите кнопку отправки. Это отобразит имя и фамилию на вашем экране, а также установит два файла cookie.firstName и lastName. Эти файлы cookie будут переданы обратно на сервер, когда вы в следующий раз нажмете кнопку «Отправить».

В следующем разделе мы объясним, как вы можете получить доступ к этим файлам cookie в своем веб-приложении.

Чтение файлов cookie с помощью JSP

Чтобы читать файлы cookie, вам необходимо создать массив объектов javax.servlet.http.Cookie , вызвав методgetCookies( )метод HttpServletRequest . Затем прокрутите массив и используйтеgetName() и getValue() методы доступа к каждому cookie и связанному с ним значению.

пример

Давайте теперь прочитаем файлы cookie, которые были установлены в предыдущем примере -

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println("<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Давайте теперь поместим приведенный выше код в main.jspфайл и попробуйте получить к нему доступ. Если вы установитеfirst_name cookie как "Джон" и last_name cookie как «Игрок», то бег http://localhost:8080/main.jsp отобразит следующий результат -

Found Cookies Name and Value

Name : first_name, Value: John

Name : last_name, Value: Player

Удалить файлы cookie с помощью JSP

Удалить куки очень просто. Если вы хотите удалить файл cookie, вам просто нужно выполнить следующие три шага:

  • Прочтите уже существующий файл cookie и сохраните его в объекте Cookie.

  • Установите нулевой возраст файлов cookie с помощью setMaxAge() метод удаления существующего файла cookie.

  • Добавьте этот файл cookie обратно в заголовок ответа.

пример

В следующем примере показано, как удалить существующий файл cookie с именем "first_name" и когда вы в следующий раз запустите main.jsp JSP, он вернет нулевое значение для first_name.

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               
               if((cookie.getName( )).compareTo("first_name") == 0 ) {
                  cookie.setMaxAge(0);
                  response.addCookie(cookie);
                  out.print("Deleted cookie: " + 
                  cookie.getName( ) + "<br/>");
               }
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println(
            "<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Давайте теперь поместим приведенный выше код в main.jspфайл и попробуйте получить к нему доступ. Он отобразит следующий результат -

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Теперь запустите http: // localhost: 8080 / main.jsp еще раз, и он должен отобразить только один файл cookie следующим образом:

Found Cookies Name and Value

Name : last_name, Value: Player

Вы можете удалить файлы cookie в Internet Explorer вручную. Откройте меню «Сервис» и выберите «Свойства обозревателя». Чтобы удалить все файлы cookie, нажмите кнопку Удалить файлы cookie.