JSP cookie基础

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


JSP Cookie处理

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

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

Cookie剖析

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

HTTP/1.1 200 OK
Date: Wed, 10 May 2017 03:33:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=runoob; expires=Wednesday, 10-May-17 04:33:38 GMT; 
                 path=/; domain=runoob.com
Connection: close
Content-Type: text/html

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

使用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值