Cookie入门

    Cookie:客户端技术  把每个用户的数据以cookie的形式写给各自的浏览器。当用户使用浏览器访问服务器中的数据,查看API中关于cookie中的信息:1.服务器通过addCookie将信息放到响应头中发送给了浏览器。2.服务器通过getCookie获得浏览器中的cookie。3.在Cookie类中,cookie对象没有相关的set方法,往cookie中添加数据的唯一方法就是,在创建时传参赋值,这说明一个cookie中只有一对键值对。4.Cookie中是不能存储对象的,他的键和值都必须是字符串类型的。5.你可以将一个cookie看作一个配置文件,文件中保存的数据是不固定的。

    举个例子,你在某个网站的登录界面进行了登录,如果该网站的服务器支持Cookie服务,它会将你的账号保存在一个Cookie中发送给浏览器,当你的浏览器再次进入这个页面时,服务器接收到浏览器的request对象中会有此Cookie,它将自动为账户名填入Cookie中的数据

    cookie的限制:每一个cookie的容量不能超过4K,cookie的数量也是有限制的,一个浏览器中不能超过300个cookie,而一个站点对应的cookie也不能超过20个

    cookie默认存储在浏览器中的缓存中,浏览器一旦关闭cookie就被删除了。setMaxAge(time)能设置cookie的最大存活时间,默认单位是秒。setMaxAge(-1) 浏览器中对Cookie的设置默认是-1,浏览器一但关闭,cookie全都没了。sexMaxAge(0):浏览器不关闭,cookie也没了

    注意每个Cookie中都会保存相关路径,在创建Cookie是一定要注意设置该Cookie的路径,浏览器会根据路径识别该不该把相应的cookie发给服务器端 cookie.setPath(request.getContextPath())用这个方法进行设置,同一个浏览器中是不能存在两个路径,键相同的Cookie的,后添加的会取代原来添加的。

    下面是一个对Cookie进行测试的小程序,是在本机上进行的,谷歌浏览器作为客户端,使用tomcat作为服务器

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LoginServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		String v = "";
		String checked = "";
		Cookie[] cks = request.getCookies();
		if(cks!=null)
		{
			for(int i=0;i<cks.length;i++){
				if("username".equals(cks[i].getName())){
					v = cks[i].getValue();
					checked="checked=checked";
				}
			}
		}
		out.println("<form action='/Cookie1/DoLogin' method='post'>");
		out.println("用户名:<input type='text' name='username' value='"+v+"'> <br/>");
		out.println("密码:<input type='password' name='psd'> <br/>");
		out.println("记住用户名:<input type='checkbox' name='remUser' "+checked+"> <br/>");
		out.println("<input type='submit' value='登陆'><br/>");
		out.println("</form>");
		out.println("<a href='/Cookie1/DelCookie' style='color:red;text-decoration:none'>删除cookie</a>");
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request,response);
	}

}

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class DoLogin extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 request.setCharacterEncoding("utf-8");
		 response.setContentType("text/html;charset=utf-8");
	     PrintWriter out=response.getWriter();
	       
	     String username=request.getParameter("username");
	     String psd=request.getParameter("psd");
	     String  remUser=request.getParameter("remUser");
	     if(("admin".equals(username))&&("123".equals(psd))){
	    	 if(remUser!=null){
		    	 Cookie cookie=new Cookie("username","admin");
		    	 cookie.setPath(request.getContextPath());
		    	 response.addCookie(cookie);
	    	 }
	    	 out.println("登陆成功");
	    	 response.setHeader("refresh","3;url=/Cookie1/LoginServlet");
	     }else{
	    	 out.println("登录失败,3秒之后转回到登录页面");
	    	 response.setHeader("refresh","3;url=/Cookie1/LoginServlet");
	     }
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}

}
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class DelCookie extends HttpServlet {

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			request.setCharacterEncoding("utf-8");
			response.setContentType("text/html;charset=utf-8");
			PrintWriter out=response.getWriter();
			//删除Cookie
			Cookie cookie=new Cookie("username","");
			//设置path,否则可能会错删
			cookie.setPath(request.getContextPath());
			response.addCookie(cookie);
			out.println("删除成功");
			response.setHeader("refresh", "3;url="+ request.getContextPath()+"/LoginServlet");
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		
	}

}

            我在LoginServlet中定义了一个表单,表单只有简单的几个部分,账户名,密码,一个选择是否记住用户名的复选框,一个提交按钮和一个删除Cookie的超链接,当你输入了正确的账户名和密码并选择了记住用户名之后,表单被提交到DoLogin去执行,在这个程序中创建了一个记录了用户名的Cookie,这个Cookie被添加到Response中有服务器返回给浏览器,3秒之后程序将会跳转到登录界面中,此时浏览器再次访问登录页面,他拿出自己的Cookie去访问服务器,LoginServlet得到了这个Cookie,将用户名填入到账户名的输入框中。点击删除Cookie的超链接之后,浏览器去访问DelCookie,在此Servlet中创建了一个新的Cookie,此Cookie的键与原来Cookie的键相同,因此取代了原来的Cookie,达到删除的目的。

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值