JSP cookie基础

来源:互联网 发布:指尖软件 编辑:程序博客网 时间:2024/05/21 21:01

HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。


JSP Cookie处理

Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息。
利用cookie技术识别用户。通常有三个步骤:

  • 服务器脚本发送一系列cookie至浏览器。比如名字,年龄,ID号码等等。
  • 浏览器在本地机中存储这些信息,以备不时之需。
  • 当下一次浏览器发送任何请求至服务器时,它会同时将这些cookie信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。

Cookie剖析

Cookie通常在HTTP信息头中设置(虽然JavaScript能够直接在浏览器中设置cookie)。在JSP中,设置一个cookie需要发送如下的信息头给服务器:

HTTP/1.1 200 OKDate: Wed, 10 May 2017 03:33:38 GMTServer: Apache/1.3.9 (UNIX) PHP/4.0b3Set-Cookie: name=runoob; expires=Wednesday, 10-May-17 04:33:38 GMT;                  path=/; domain=runoob.comConnection: closeContent-Type: text/html

Set-Cookie信息头包含一个键值对,一个GMT(格林尼治标准)时间,一个路径,一个域名。键值对会被编码为URL。有效期域是个指令,告诉浏览器在什么时候之后就可以清除这个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

JSP设置Cookie

使用JSP设置cookie包含三个步骤:

/***   (1)创建一个Cookie对象: *   调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。*/Cookie cookie = new Cookie("key","value");/***   (2)设置有效期: *   调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。*/cookie.setMaxAge(60*60*24); /***   (3) 将cookie发送至HTTP响应头中:*   调用response.addCookie()函数来向HTTP响应头中添加cookie。*/response.addCookie(cookie);

需要注意的是:JSP Cookie 处理需要对中文进行编码与解码。

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

实例:

cookieTest.html

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Cookie Test</title></head><body>    <form action="setCookie.jsp" method=GET>        用户: <input type="text" name="name">         <br />         密码: <input type="text" name="pwd" />         <hr>        <input type="submit" value="提交" />    </form></body></html>

setCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ page import="java.net.*"%><%    // 编码,解决中文乱码       String para_name = URLEncoder.encode(request.getParameter("name"), "utf-8");    String para_pwd = URLEncoder.encode(request.getParameter("pwd"), "utf-8");    // 设置 name 和 url cookie     Cookie name = new Cookie("name", para_name);    Cookie pwd = new Cookie("pwd", para_pwd);    // 设置cookie过期时间为1小时。    name.setMaxAge(60 * 60 * 1);    pwd.setMaxAge(60 * 60 * 1);    // 在响应头部添加cookie    response.addCookie(name);    response.addCookie(pwd);%><html><head><meta charset="utf-8"><title>Cookie Test</title></head><body>    <p>此页在jsp代码里设置了cookie。</p>    <p>请在浏览器查看刚设置的cookie</p></body></html>

效果图:
运行:
这里写图片描述

查看cookie:
这里写图片描述
这里写图片描述


JSP读取Cookie

JSP读取cookie,需要调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组。该数组存储了cookie的所有键值对。
接下来我们读取刚才的cookie。

cookieTest.html里的代码:

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Cookie Test</title></head><body>    <form action="setCookie.jsp" method=GET>        用户: <input type="text" name="name">         <br />         密码: <input type="text" name="pwd" />         <hr>        <input type="submit" value="提交" />    </form>    <br>    <hr>    <form action="getCookie.jsp" method=GET>        <input type="submit" value="getCookie" />    </form></body></html>

getCookie.jsp里的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ page import="java.net.*"%><html><head><meta charset="utf-8"><title>Cookie Test</title></head><body>    <h1>getCookie</h1>    <%    Cookie[] cookies = request.getCookies();    for(int i=0; i<cookies.length; i++){        out.print("<p>");        out.print("key:"+cookies[i].getName());        out.print("<br>");        out.print("value:"+cookies[i].getValue());        out.print("</p><hr>");    }    %></body></html>

运行效果:
这里写图片描述


JSP删除Cookie

  • 获取一个已经存在的cookie然后存储在Cookie对象中。
  • 将cookie的有效期设置为0。
  • 将这个cookie重新添加进响应头中。

这个比较简单就不演示了。

0 0