cookie理解

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 响应头中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值