cookie是什么?
当用户通过浏览器访问Web服务器时,服务器会给客户发送一些信息,这些信息都保存在Cookie中。比如说我i们登录某个网站成功后,把网站关掉之后再次访问时我i们不用重新登陆就直接进去 ,我们的信息便存在了cookie中。当该浏览器再次访问服务器时,会将Cookie发送给服务器,服务器对浏览器做出正确的响应。
每一个cookie都有一个name和一个value,且name是唯一的。相同名字时,后者会覆盖掉前者。
Cookie 是存储在客户机的文本文件,它们保存了大量轨迹信息。在 Servlet 技术基础上,JSP 显然能够提供对 HTTP cookie 的支持。
通常有三个步骤来识别回头客:
- 服务器脚本发送一系列 cookie 至浏览器。比如名字,年龄,ID 号码等等。
- 浏览器在本地机中存储这些信息,以备不时之需。
- 当下一次浏览器发送任何请求至服务器时,它会同时将这些 cookie 信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。
cookie方法
创建一个cookie:
Cookie cookie1 = new Cookie("key",value);
创建了一个名字为“key”,值为“value”的cookie,“cookie1”作为该cookie的调用对象,调用各种方法。注意cookie名字要加上双引号。
Cookie 对象中常用的方法:
getName() | 返回 cookie 的名称,名称创建后将不能被修改 |
setValue(String newValue) | 设置 cookie 的值 |
getValue() | 获取cookie的值 |
setMaxAge(int expiry) | 设置 cookie 有效期,以秒为单位,默认有效期为当前session的存活时间 |
getMaxAge() | 获取 cookie 有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止 |
setPath(String uri) | 设置 cookie 的路径,默认为当前页面目录下的所有 URL,还有此目录下的所有子目录 |
getPath() | 获取 cookie 的路径 |
设置有效期:调用 setMaxAge() 函数表明 cookie 在多长时间(以秒为单位)内有效。下面的操作将有效期设为了 24 小时。
cookie.setMaxAge(60*60*24);
将 cookie 发送至 HTTP 响应头中:调用 response.addCookie() 函数来向 HTTP 响应头中添加 cookie。
response.addCookie(cookie);
实例
一个常见的用户登录界面用到cookie来进行保存用户登录账号密码的实例。
login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页---首次访问,没有cookie---再次访问,就有了,可以从cookie中拿值</title>
</head>
<body>
<%!
String uname;
String upwd;
%>
<%
Cookie[] cookies=request.getCookies();//获取所有的cookies
// 如果是第一次访问,肯定找不到cookie
for(Cookie cookie:cookies){
//找到uname的cookie
if(cookie.getName().equals("uname")){
uname=cookie.getValue();
}
//找到upwd的cookie
if(cookie.getName().equals("upwd")){
upwd=cookie.getValue();
}
}
%>
<form action="check.jsp" method="post">
<!-- 该框中的值是保存在value中的 -->
用户名:<input type="text" name="uname" value="<%=(uname==null?"":uname)%>"><br/>
密码:<input type="text" name="upwd" value="<%=(upwd==null?"":upwd)%>"><br/>
<input type="submit" value="登录"><br/>
</form>
</body>
</html>
通过得到cookie中的信息来自动填入登录界面表单中的账号和密码。
由于第一次登录没有创建名为“uname”和“upwd”的cookie,所以需要用户输入登录保存信息,第二次登录便可以实现自动填入。
填完表单后servlet转到check.jsp
check.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>检查页,直接产生cookie</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
//将用户名加入到cookie
Cookie cookie1=new Cookie("uname",name);//建议cookie中只保存英文和数字否则涉及到编码问题
Cookie cookie2=new Cookie("upwd",pwd);
response.addCookie(cookie1);
response.addCookie(cookie2);
//用客户端重定向的方式,浏览器里面可以看出请求过程
response.sendRedirect("result.jsp");//cookies也随之返回到了客户端所以在login界面可以用到
%>
</body>
</html>
通过servlet转发信息,分别以用户输入的账号密码创建名字为“uname”和“upwd”的cookie,并将 cookie 发送至 HTTP 响应头中。