当前位置:K88软件开发文章中心编程全书编程全书02 → 文章内容

JSP Cookies

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-4 8:17:59

-->

Cookies处理

Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息。在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持。

通常有三个步骤来识别回头客:

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

Jsp保存用户状态的两大机制:

  • Session
  • Cookie

Cookies 方法

下表列出了Cookie对象中常用的方法:

序号方法 & 描述
1public void setDomain(String pattern)设置cookie的域名,比如k88.net
2public String getDomain()获取cookie的域名,比如k88.net
3public void setMaxAge(int expiry)设置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,还有此目录下的所有子目录
9public String getPath()获取cookie 的路径
10public void setSecure(boolean flag)指明cookie是否要加密传输
11public void setComment(String purpose)设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用
12public String getComment()返回描述cookie目的的注释,若没有则返回null

在JSP中创建和使用Cookie

(1)创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。

1
Cookie cookie = new Cookie("key","value");

(2) 设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时.

1
cookie.setMaxAge(60*60*24);

(3) 将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies.

1
response.addCookie(cookie);

(4)读取Cookies对象:需要调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组,然后遍历这个数组,使用getName()方法和getValue()方法来获取每一个cookie的名称和值。

1
Cookie []cookies=request.getCookies();

(5)使用JSP删除Cookies :删除cookies非常简单。如果您想要删除一个cookie,按照下面给的步骤来做就行了:

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

Cookies登录页面处理练习

[t]login.jsp[/t]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=utf-8"%>


?

?
<h1>用户登录</h1>

<hr />

<%
request.setCharacterEncoding("utf-8");
String username="";
String password = "";
Cookie[] cookies = request.getCookies(); //获取已保存的cookie信息至下面表单中。
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
if(c.getName().equals("username"))
{
username = URLDecoder.decode(c.getValue(),"utf-8");
}
if(c.getName().equals("password"))
{
password = URLDecoder.decode(c.getValue(),"utf-8");
}
}
}
%>

<form action="dologin.jsp" method="post" name="loginForm">
<table>
<tbody>
<tr>
<td>用户名:</td>
<!--下述value的值为上面已保存至cookie的数据  -->
<td><input name="username" type="text" value=""<%=username" />"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input name="password" type="password" value="<%=password %>" /></td>
</tr>
<tr>
<td colspan="2"><input checked="checked" name="isUseCookie" type="checkbox" />十天内记住我的登录状态</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登录" /><input type="reset" value="取消" /></td>
</tr>
</tbody>
</table>
</form>?

[t]dologin.jsp[/t]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=utf-8"%>

?

?
<h1>登录成功</h1>

<hr />

<%
request.setCharacterEncoding("utf-8");
//首先判断用户是否选择了记住登录状态
String[] isUseCookies = request.getParameterValues("isUseCookie");
if(isUseCookies!=null&&isUseCookies.length>0)
{
//把用户名和密码保存在Cookie对象里面
String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
//使用URLEncoder解决无法在Cookie当中保存中文字符串问题
String password = URLEncoder.encode(request.getParameter("password"),"utf-8");

Cookie usernameCookie = new Cookie("username",username);
Cookie passwordCookie = new Cookie("password",password);
usernameCookie.setMaxAge(864000);
passwordCookie.setMaxAge(864000);//设置最大生存期限为10天
response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
}
else
{
//不使用Cookies
Cookie[] cookies = request.getCookies();
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
if(c.getName().equals("username")||c.getName().equals("password"))
{

c.setMaxAge(0); //设置Cookie失效
response.addCookie(c); //重新保存。
}
}
}
}
%>

<a href="users.jsp" target="_blank">查看用户信息</a>

[t]user.jsp[/t]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=utf-8"%>

?

?

?
<h1>用户信息</h1>

<hr />

<%
//获取Cookie用户信息
request.setCharacterEncoding("utf-8");
String username="";
String password = "";
Cookie[] cookies = request.getCookies();
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
if(c.getName().equals("username"))
{
username = URLDecoder.decode(c.getValue(),"utf-8"); //获取username
}
if(c.getName().equals("password"))
{
password = URLDecoder.decode(c.getValue(),"utf-8");
}
}
}
%>

用户名:<%=username %>

<!--输出信息  -->
密码:<%=password %>

JSP Cookies