首页 » 网站推广 » phpcookieclass技巧_Servlet Cookie 处理

phpcookieclass技巧_Servlet Cookie 处理

duote123 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

识别返回用户包括三个步骤:

做事器脚本向浏览器发送一组 Cookie。
例如:姓名、年事或识别号码等。

phpcookieclass技巧_Servlet Cookie 处理

浏览器将这些信息存储在本地打算机上,以备将来利用。

phpcookieclass技巧_Servlet Cookie 处理
(图片来自网络侵删)

当下一次浏览器向 Web 做事器发送任何要求时,浏览器会把这些 Cookie 信息发送到做事器,做事器将利用这些信息来识别用户。

本章将向您讲解如何设置或重置 Cookie,如何访问它们,以及如何将它们删除。

Servlet Cookie 处理须要对中文进行编码与解码,方法如下:

String str = java.net.URLEncoder.encode(\公众中文\公众,\"大众UTF-8\"大众); //编码String str = java.net.URLDecoder.decode(\公众编码后的字符串\"大众,\"大众UTF-8\公众); // 解码

Cookie 阐发

Cookie 常日设置在 HTTP 头信息中(虽然 JavaScript 也可以直接在浏览器上设置一个 Cookie)。
设置 Cookie 的 Servlet 会发送如下的头信息:

HTTP/1.1 200 OKDate: Fri, 04 Feb 2000 21:03:38 GMTServer: Apache/1.3.9 (UNIX) PHP/4.0b3Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=runoob.comConnection: closeContent-Type: text/html

正如您所看到的,Set-Cookie 头包含了一个名称值对、一个 GMT 日期、一个路径和一个域。
名称和值会被 URL 编码。
expires 字段是一个指令,见告浏览器在给定的韶光和日期之后\公众忘却\"大众该 Cookie。

如果浏览器被配置为存储 Cookie,它将会保留此信息直到到期日期。
如果用户的浏览器指向任何匹配该 Cookie 的路径和域的页面,它会重新发送 Cookie 到做事器。
浏览器的头信息可能如下所示:

GET / HTTP/1.0Connection: Keep-AliveUser-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)Host: zink.demon.co.uk:1126Accept: image/gif, /Accept-Encoding: gzipAccept-Language: enAccept-Charset: iso-8859-1,,utf-8Cookie: name=xyz

Servlet 就能够通过要求方法 request.getCookies() 访问 Cookie,该方法将返回一个 Cookie 工具的数组。

Servlet Cookie 方法

以下是在 Servlet 中操作 Cookie 时可利用的有用的方法列表。

序号方法 & 描述1public void setDomain(String pattern)

该方法设置 cookie 适用的域,例如 runoob.com。

2public String getDomain()

该方法获取 cookie 适用的域,例如 runoob.com。

3public void setMaxAge(int expiry)

该方法设置 cookie 过期的韶光(以秒为单位)。
如果不这样设置,cookie 只会在当前 session 会话中持续有效。

4public int getMaxAge()

该方法返回 cookie 的最大生存周期(以秒为单位),默认情形下,-1 表示 cookie 将持续下去,直到浏览器关闭。

5public String getName()

该方法返回 cookie 的名称。
名称在创建后不能改变。

6public void setValue(String newValue)

该方法设置与 cookie 关联的值。

7public String getValue()

该方法获取与 cookie 关联的值。

8public void setPath(String uri)

该方法设置 cookie 适用的路径。
如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。

9public String getPath()

该方法获取 cookie 适用的路径。

10public void setSecure(boolean flag)

该方法设置布尔值,表示 cookie 是否该当只在加密的(即 SSL)连接上发送。

11public void setComment(String purpose)

设置cookie的注释。
该注释在浏览器向用户呈现 cookie 时非常有用。

12public String getComment()

获取 cookie 的注释,如果 cookie 没有注释则返回 null。

通过 Servlet 设置 Cookie

通过 Servlet 设置 Cookie 包括三个步骤:

(1) 创建一个 Cookie 工具:您可以调用带有 cookie 名称和 cookie 值的 Cookie 布局函数,cookie 名称和 cookie 值都是字符串。

Cookie cookie = new Cookie(\"大众key\"大众,\"大众value\公众);

请记住,无论是名字还是值,都不应该包含空格或以下任何字符:

[ ] ( ) = , \公众 / ? @ : ;

(2) 设置最大生存周期:您可以利用 setMaxAge 方法来指定 cookie 能够保持有效的韶光(以秒为单位)。
下面将设置一个最长有效期为 24 小时的 cookie。

cookie.setMaxAge(606024);

(3) 发送 Cookie 到 HTTP 相应头:您可以利用 response.addCookie 来添加 HTTP 相应头中的 Cookie,如下所示:

response.addCookie(cookie);

实例

让我们修正我们的 表单数据实例,为名字和姓氏设置 Cookie。

package com.runoob.test;import java.io.IOException;import java.io.PrintWriter;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/ Servlet implementation class HelloServlet/@WebServlet(\"大众/HelloForm\"大众)public class HelloForm extends HttpServlet { private static final long serialVersionUID = 1L; / @see HttpServlet#HttpServlet() / public HelloForm() { super(); // TODO Auto-generated constructor stub } / @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) / public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 为名字和姓氏创建 Cookie Cookie name = new Cookie(\"大众name\"大众, URLEncoder.encode(request.getParameter(\"大众name\"大众), \"大众UTF-8\公众)); // 中文转码 Cookie url = new Cookie(\"大众url\公众, request.getParameter(\"大众url\公众)); // 为两个 Cookie 设置过期日期为 24 小时后 name.setMaxAge(606024); url.setMaxAge(606024); // 在相应头中添加两个 Cookie response.addCookie( name ); response.addCookie( url ); // 设置相应内容类型 response.setContentType(\"大众text/html;charset=UTF-8\"大众); PrintWriter out = response.getWriter(); String title = \"大众设置 Cookie 实例\"大众; String docType = \公众<!DOCTYPE html>\n\公众; out.println(docType + \公众<html>\n\"大众 + \公众<head><title>\"大众 + title + \"大众</title></head>\n\公众 + \"大众<body bgcolor=\\"大众#f0f0f0\\"大众>\n\"大众 + \"大众<h1 align=\\"大众center\\"大众>\"大众 + title + \"大众</h1>\n\公众 + \"大众<ul>\n\"大众 + \公众 <li><b>站点名:</b>:\"大众 + request.getParameter(\"大众name\"大众) + \"大众\n</li>\公众 + \公众 <li><b>站点 URL:</b>:\公众 + request.getParameter(\"大众url\"大众) + \"大众\n</li>\公众 + \"大众</ul>\n\公众 + \"大众</body></html>\"大众); } / @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) / protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}

编译上面的 Servlet HelloForm,并在 web.xml 文件中创建适当的条款:

<?xml version=\"大众1.0\"大众 encoding=\"大众UTF-8\"大众?><web-app> <servlet> <!-- 类名 --> <servlet-name>HelloForm</servlet-name> <!-- 所在的包 --> <servlet-class>com.runoob.test.HelloForm</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloForm</servlet-name> <!-- 访问的网址 --> <url-pattern>/TomcatTest/HelloForm</url-pattern> </servlet-mapping></web-app>

末了考试测验下面的 HTML 页面来调用 Servlet。

<!DOCTYPE html><html><head><meta charset=\"大众utf-8\公众><title>菜鸟教程(runoob.com)</title></head><body><form action=/TomcatTest/HelloForm method=\"大众GET\公众>站点名 :<input type=\公众text\"大众 name=\"大众name\公众><br />站点 URL:<input type=\公众text\公众 name=\"大众url\公众 /><br><input type=\"大众submit\"大众 value=\"大众提交\"大众 /></form></body></html>

保存上面的 HTML 内容到文件 /TomcatTest/test.html 中。

把稳:以上的一些路径须要根据你项目实际路径修正。

通过 Servlet 读取 Cookie

要读取 Cookie,您须要通过调用 HttpServletRequest 的 getCookies( ) 方法创建一个 javax.servlet.http.Cookie 工具的数组。
然后循环遍历数组,并利用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。

实例

让我们读取上面的实例中设置的 Cookie

package com.runoob.test;import java.io.IOException;import java.io.PrintWriter;import java.net.URLDecoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/ Servlet implementation class ReadCookies/@WebServlet(\"大众/ReadCookies\公众)public class ReadCookies extends HttpServlet { private static final long serialVersionUID = 1L; / @see HttpServlet#HttpServlet() / public ReadCookies() { super(); // TODO Auto-generated constructor stub } / @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) / public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = null; Cookie[] cookies = null; // 获取与该域干系的 Cookie 的数组 cookies = request.getCookies(); // 设置相应内容类型 response.setContentType(\"大众text/html;charset=UTF-8\"大众); PrintWriter out = response.getWriter(); String title = \公众Delete Cookie Example\"大众; String docType = \"大众<!DOCTYPE html>\n\公众; out.println(docType + \公众<html>\n\公众 + \公众<head><title>\"大众 + title + \"大众</title></head>\n\"大众 + \"大众<body bgcolor=\\公众#f0f0f0\\"大众>\n\"大众 ); if( cookies != null ){ out.println(\公众<h2>Cookie 名称和值</h2>\"大众); for (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; if((cookie.getName( )).compareTo(\"大众name\"大众) == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print(\"大众已删除的 cookie:\"大众 + cookie.getName( ) + \"大众<br/>\"大众); } out.print(\"大众名称:\"大众 + cookie.getName( ) + \"大众,\"大众); out.print(\"大众值:\"大众 + URLDecoder.decode(cookie.getValue(), \"大众utf-8\"大众) +\"大众 <br/>\"大众); } }else{ out.println( \"大众<h2 class=\\"大众tutheader\\"大众>No Cookie founds</h2>\公众); } out.println(\"大众</body>\公众); out.println(\"大众</html>\公众); } / @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) / protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}

编译上面的 Servlet ReadCookies,并在 web.xml 文件中创建适当的条款。
考试测验运行 http://localhost:8080/TomcatTest/ReadCookies,将显示如下结果:

通过 Servlet 删除 Cookie

删除 Cookie 是非常大略的。
如果您想删除一个 cookie,那么您只须要按照以下三个步骤进行:

读取一个现有的 cookie,并把它存储在 Cookie 工具中。

利用 setMaxAge() 方法设置 cookie 的年事为零,来删除现有的 cookie。

把这个 cookie 添加到相应头。

实例

下面的例子将删除现有的名为 \公众url\"大众 的 cookie,当您下次运行 ReadCookies 的 Servlet 时,它会返回 url 为 null。

package com.runoob.test;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/ Servlet implementation class DeleteCookies/@WebServlet(\"大众/DeleteCookies\"大众)public class DeleteCookies extends HttpServlet { private static final long serialVersionUID = 1L; / @see HttpServlet#HttpServlet() / public DeleteCookies() { super(); // TODO Auto-generated constructor stub } / @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) / public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = null; Cookie[] cookies = null; // 获取与该域干系的 Cookie 的数组 cookies = request.getCookies(); // 设置相应内容类型 response.setContentType(\公众text/html;charset=UTF-8\"大众); PrintWriter out = response.getWriter(); String title = \公众删除 Cookie 实例\公众; String docType = \"大众<!DOCTYPE html>\n\"大众; out.println(docType + \公众<html>\n\"大众 + \"大众<head><title>\"大众 + title + \"大众</title></head>\n\"大众 + \公众<body bgcolor=\\"大众#f0f0f0\\"大众>\n\公众 ); if( cookies != null ){ out.println(\"大众<h2>Cookie 名称和值</h2>\公众); for (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; if((cookie.getName( )).compareTo(\"大众url\公众) == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print(\"大众已删除的 cookie:\"大众 + cookie.getName( ) + \"大众<br/>\"大众); } out.print(\"大众名称:\"大众 + cookie.getName( ) + \"大众,\公众); out.print(\"大众值:\公众 + cookie.getValue( )+\公众 <br/>\公众); } }else{ out.println( \"大众<h2 class=\\"大众tutheader\\"大众>No Cookie founds</h2>\"大众); } out.println(\"大众</body>\"大众); out.println(\公众</html>\公众); } / @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) / protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}

编译上面的 Servlet DeleteCookies,并在 web.xml 文件中创建适当的条款。
现在运行 http://localhost:8080/TomcatTest/DeleteCookies,将显示如下结果:

标签:

相关文章

phpinigpc技巧_php设备文件详解phpini

; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而php.ini的设置变动可以反响出相称的变革, ; 在利用新的PHP...

网站推广 2024-12-11 阅读0 评论0