Cookie的使用

Posted 晓锋残月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie的使用相关的知识,希望对你有一定的参考价值。

1.Cookie的基本使用

(1)Cookie技术介绍 Cookie是 客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
(2)Cookie适用范围 在众多网站的登录中,特别是购物网站,浏览器的商品信息希望得打保存,但是通过其他域对象均无法做到,所以才会是的Cookie技术成为十分必要的一项内容。
(3)Cookie的基本创建 创建一个Servlet,命名为Cookie01
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		//2获取客户端左后保存时间
		Cookie[] cookies = request.getCookies();//获取客户端中所有Cookie对象
		for (int i = 0; cookies!=null&&i < cookies.length; i++) 
			 if("lastAccessTime".equals(cookies[i].getName()))
				 long l = Long.parseLong(cookies[i].getValue());
				 out.print("你最后访问时间为:"+new Date(l).toLocaleString());
			 
		
		
		//1创建Cookie
		Cookie ck=new Cookie("lastAccessTime",System.currentTimeMillis()+"");
		//1.1将Cookie写回到客户端
		response.addCookie(ck);
	
得到的结果为: ①首次访问Cookie01时
②当再次访问时


这样名为“lastAccessTime的对象变创建成功”

(4)Cookie技术的创建流程

在该过程中,先创建一个Cookie对象,之后便可以在另外一个Servlet中取出该Cookie使用,由上面的图可以清晰看出Cookie是客户端浏览器器保存,所以称其为: 客户端技术

(5)注意问题 ①由于会话是指:浏览器打开到浏览器关闭这一过程。因此一旦浏览器关闭,会话结束,Cookie对象删除,达到 在上面的过程中,关闭浏览器,再次打开浏览器,访问Cookie01


更换浏览器访问,也不能得到保存了的Cookie对象,因为Cookie是保存在相应的客户端浏览器中,所以在另外一个浏览器中并没有保存 换一个Firefox查看效果



2.Cookie的介绍

(1)常见API方法 构造方法:
  • public Cookie(String name,String value)         name值在路径不同的情况下,Cookie名可以相同。value值 不能存中文
基本方法:
  • void setValue(String newValue)      在创建 cookie 之后将新值分配给 cookie  
  • String getValue()       返回Cookie的值
  • void setMaxAge(int expiry) /int getMaxAge()      cookie的缓存时间。默认是-1(默认存在浏览器的内存中)。单位是秒
                负数:cookie的数据存在浏览器缓存中
              0:删除。路径要保持一致,否则可能删错人。
              正数:缓存(持久化到磁盘上)的时间
  • void setPath(String uri)     指定客户端应该返回 cookie 的路径。
  •  String getPath()          返回浏览器将此 cookie 返回到的服务器上的路径
比如:http://localhost:8080/day10_cookie/servlet/ck1写的Cookie
path就是:/day10_00_cookie/servlet 看当前创建cookie的资源(servlet)文件路径
客户端在访问服务器另外资源时,根据访问的路径来决定是否带着Cookie到服务器
当前访问的路径如果是以cookie的path开头的路径,浏览器就带。否则不带。
  • response.addCookie(ck);    将Cookie写回到客户端

(2)长时间保存Cookie和销毁Cookie

在上面的方法中setMaxAge设置一个时间值来保存Cookie

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		//2获取客户端左后保存时间
		Cookie[] cookies = request.getCookies();//获取客户端中所有Cookie对象
		for (int i = 0; cookies!=null&&i < cookies.length; i++) 
			 if("lastAccessTime".equals(cookies[i].getName()))
				 long l = Long.parseLong(cookies[i].getValue());
				 out.print("你最后访问时间为:"+new Date(l).toLocaleString());
			 
		
		
		//1创建Cookie
		Cookie ck=new Cookie("lastAccessTime",System.currentTimeMillis()+"");
		//3.1设置Cookie的有效值,单位是秒
		ck.setMaxAge(60*1);
		//3.2设置Cookie的path
		//ck.setPath("/ee10_Cookie");//将Cookie保存的位置为当前目录
		//ck.setPath(request.getContextPath());//等价于上面的内容
		ck.setPath("/");//相当上面
		//1.1将Cookie写回到客户端
		response.addCookie(ck);
	
得到的结果为:

第一次打开浏览器并访问,得到的结果和前面的一样,但是关闭浏览器后,首次访问

设置的一分钟到期后,关闭浏览器,再次打开,仍然为空白页。


销毁操作

利用SetMaxAge(0)来执行   在Cookie01中写入一下代码

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		//2获取客户端左后保存时间
		Cookie[] cookies = request.getCookies();//获取客户端中所有Cookie对象
		for (int i = 0; cookies!=null&&i < cookies.length; i++) 
			 if("lastAccessTime".equals(cookies[i].getName()))
				 long l = Long.parseLong(cookies[i].getValue());
				 out.print("你最后访问时间为:"+new Date(l).toLocaleString());
			 
		
		
		//1创建Cookie
		Cookie ck=new Cookie("lastAccessTime",System.currentTimeMillis()+"");
		//3.1设置Cookie的有效值,单位是秒
		ck.setMaxAge(60*1);
		//3.2设置Cookie的path
		//ck.setPath("/ee10_Cookie");//将Cookie保存的位置为当前目录
		//ck.setPath(request.getContextPath());//等价于上面的内容
		ck.setPath("/");//相当上面
		//1.1将Cookie写回到客户端
		response.addCookie(ck);
		//4对象销毁
		out.print("<a href='/ee11_Cookie/servlet/Clear'>clear</a>");
	

在Clear中写一下代码

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 
		//创建一个Cookie对象
		Cookie ck=new Cookie("lastAccessTime","");
		ck.setPath("/");//要设置被删除Cookie的path,否则可能因找不到而出错
		ck.setMaxAge(0);//相当于立即删除Cookie对象
		response.addCookie(ck);//将Cookie写回到客户端缓存
	

得到结果:

首次访问:


再次访问


点击“Clear”,本来该Cookie应该有1分钟时间,但是点击Clear后,Cookie消失,因而得到的结果为下面内容




3.总结

以上便是我对于Cookie的简单总结,如果有错误,请提出,谢谢。

以上是关于Cookie的使用的主要内容,如果未能解决你的问题,请参考以下文章

cookie

re.findall带负数,我的代码仅适用于正数

cookie和session机制

仅对 Google 表格中某个范围内的正数/负数求和

索引超出范围错误? Roblox 使用 Cookie 自动登录

如何在 Swift 中将十六进制转换为有符号浮点数?适用于正数但不适用于负数