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.