В этой главе мы обсудим обработку файлов cookie в JSP. Файлы cookie — это текстовые файлы, которые хранятся на клиентском компьютере и хранятся для различных целей отслеживания информации. JSP прозрачно поддерживает HTTP-куки с использованием базовой технологии сервлетов.
Есть три шага, вовлеченных в идентификацию и возвращение пользователей —
-
Серверный скрипт отправляет набор файлов cookie в браузер. Например, имя, возраст или идентификационный номер и т. Д.
-
Браузер хранит эту информацию на локальном компьютере для дальнейшего использования.
-
Когда браузер в следующий раз отправляет какой-либо запрос на веб-сервер, он отправляет информацию о файлах cookie на сервер, и сервер использует эту информацию для идентификации пользователя или может быть для какой-то другой цели.
Серверный скрипт отправляет набор файлов 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 содержит пару имя-значение, дату по Гринвичу, путь и домен . Имя и значение будут закодированы в URL. Поле expires — это инструкция для браузера «забыть» 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 request.getCookies (), который возвращает массив объектов Cookie .
Servlet Cookies Методы
В следующей таблице перечислены полезные методы, связанные с объектом Cookie, которые можно использовать при работе с файлами cookie в JSP.
S.No. | Метод и описание |
---|---|
1 |
public void setDomain (шаблон String) Этот метод устанавливает домен, к которому применяется 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 () Этот метод возвращает имя куки. Имя не может быть изменено после создания. |
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 (логический флаг) Этот метод устанавливает логическое значение, указывающее, следует ли отправлять cookie-файлы только через зашифрованные (т. Е. SSL) соединения. |
11 |
public void setComment (строковое назначение) Этот метод задает комментарий, который описывает цель куки. Комментарий полезен, если браузер представляет файл cookie пользователю. |
12 |
public String getComment () Этот метод возвращает комментарий, описывающий назначение этого файла cookie, или ноль, если файл cookie не имеет комментариев. |
public void setDomain (шаблон String)
Этот метод устанавливает домен, к которому применяется cookie; например, tutorialspoint.com.
public String getDomain ()
Этот метод получает домен, к которому применяется cookie; например, tutorialspoint.com.
public void setMaxAge (int expiry)
Этот метод устанавливает, сколько времени (в секундах) должно пройти до истечения срока действия cookie. Если вы не установите это, cookie будет длиться только для текущего сеанса.
public int getMaxAge ()
Этот метод возвращает максимальный возраст файла cookie, указанный в секундах. По умолчанию -1 указывает, что файл cookie будет сохраняться до завершения работы браузера.
public String getName ()
Этот метод возвращает имя куки. Имя не может быть изменено после создания.
public void setValue (String newValue)
Этот метод устанавливает значение, связанное с cookie.
public String getValue ()
Этот метод получает значение, связанное с cookie.
public void setPath (String uri)
Этот метод устанавливает путь, к которому применяется этот файл cookie. Если вы не укажете путь, файл cookie будет возвращен для всех URL-адресов в том же каталоге, что и текущая страница, а также для всех подкаталогов.
public String getPath ()
Этот метод получает путь, к которому применяется этот файл cookie.
public void setSecure (логический флаг)
Этот метод устанавливает логическое значение, указывающее, следует ли отправлять cookie-файлы только через зашифрованные (т. Е. SSL) соединения.
public void setComment (строковое назначение)
Этот метод задает комментарий, который описывает цель куки. Комментарий полезен, если браузер представляет файл cookie пользователю.
public String getComment ()
Этот метод возвращает комментарий, описывающий назначение этого файла cookie, или ноль, если файл 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 в своем веб-приложении.
Чтение Cookies с JSP
Для чтения файлов cookie необходимо создать массив объектов javax.servlet.http.Cookie , вызвав метод getCookies () объекта HttpServletRequest . Затем прокрутите массив и используйте методы getName () и getValue () для доступа к каждому файлу 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 и попробуем получить к нему доступ. Если для файла cookie first_name задано значение «John», а для файла cookie last_name — «Player», то при запуске http: // localhost: 8080 / main.jsp отобразится следующий результат:
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
Name : first_name, Value: John
Name : last_name, Value: Player
Удалить куки с JSP
Удалить куки очень просто. Если вы хотите удалить куки, то вам просто нужно выполнить следующие три шага —
-
Прочитайте уже существующий файл cookie и сохраните его в объекте Cookie.
-
Задайте возраст файла cookie равным нулю, используя метод setMaxAge () для удаления существующего файла cookie.
-
Добавьте этот cookie обратно в заголовок ответа.
Прочитайте уже существующий файл cookie и сохраните его в объекте Cookie.
Задайте возраст файла cookie равным нулю, используя метод setMaxAge () для удаления существующего файла cookie.
Добавьте этот cookie обратно в заголовок ответа.
пример
В следующем примере показано, как удалить существующий файл cookie с именем «first_name», и при следующем запуске JSP main.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
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
Вы можете удалить свои куки в Internet Explorer вручную. Начните с меню Сервис и выберите Свойства обозревателя. Чтобы удалить все файлы cookie, нажмите кнопку «Удалить файлы cookie».