Java——Web开发之Cookie的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoweiccc/article/details/84204228

Cookie:是服务器给客户端,并且存储在客户端上的一份小数据。

  • 应用场景:自动登陆,浏览记录,购物车
  • http请求是无状态的。客户端与服务器在通讯的时候,是无状态的,其实就是在客户端在第二次来访的时候,服务器根本就不知道客户端以前有没有来访问过。为了更好的用户体验,更好的交互,其实从公司层面讲,就是为了更好的收集用户习惯。
  • Cookie分类:
  1. 会话Cookie:默认情况下,关闭了浏览器,那么cookie就会消失
  2. 持久Cookie:在一定时间内都有效,并且会保存在客户端上
  • cookie.setMaxAge(0);    //设置将cookie立即删除
  • Cookie的安全问题:由于Cookie会保存在客户端上,所以有安全隐患;Cookie的大小与个数有限制
  • 简单使用过程:
  1. 发送cookie给客户端
  2. 给响应添加一个cookie
  3. 获取Cookie,获取客户端带过来的cookie

示范代码给出~

Cookie_1.java

package c.Cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Cookie_1
 */
public class Cookie_1 extends HttpServlet {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
		//1.Cookie的简单使用,发送cookie给客户端
		//是服务器发送给客户端并且保存在客户端上的一份小数据
		response.setContentType("text/html;charset=utf-8");
		/*
		 	方法参数要对象时就给对象
		 	创建对象的几种方法:
		 	1.直接new
		 	2.单例模式或者提供静态方法
		 	3.工厂模式构建	stu
		 		StuFactory StuBuilder
		 */
		Cookie c=new Cookie("aa", "bb");
		//给响应添加一个cookie
		response.addCookie(c);
		response.getWriter().write("请求成功!");
		//在客户端收到的信息里面,响应头中多了一个字段Set-Cookie:aa=bb
		
		//2.获取Cookie,获取客户端带过来的cookie
		Cookie[] cookies=request.getCookies();
		if(cookies!=null){
			for (Cookie cookie : cookies) {
				String cookieName=cookie.getName();
				String cookieValue=cookie.getValue();
				System.out.println(cookieName+"="+cookieValue);
			}
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
                    throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

实现给客户端多个cookie,设置cookie的有效期的代码~

Cookie_2.java

package c.Cookie;

import java.io.IOException;
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 Cookie_2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
		//1.先写cookie,可以给客户端多个cookie
		Cookie cookie=new Cookie("qq", "22");
		response.addCookie(cookie);
		Cookie cookie4=new Cookie("age", "12");
		response.addCookie(cookie4);
		//去客户端发送过来的cookie
		Cookie[] cookies=request.getCookies();
		if(cookies!=null){
			for (Cookie cookie2 : cookies) {
				System.out.println(cookie2.getName()+"="+cookie2.getValue());
			}
		}
		//2.cookie的有效期。默认情况下,关闭浏览器,cookie就没有了(针对没有设置cookie的有效期)
		//expiry——设置以秒为单位的有效期,正值表示在这个数字过后cookie会失效,负值表示关闭浏览器就会失效,默认是-1
		int expiry=60*60*24*7;
		cookie.setMaxAge(expiry);
		
		//用于指定只有请求了指定的域名,才会带上该cookie
		cookie.setDomain(".bcd.com");
		//只有访问该域名下的JavaWeb_2的这个路径才会带cookie
		cookie.setPath("/JavaWeb_2");
		//赋一个新的值
		cookie.setValue("rr");
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

小案例:获取最近访问时间~

login.html

<!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>Insert title here</title>
</head>
<body>
获取最近访问时间<br>
	<form action="Cookie_3">
		账号:<input type="text" name="username" /><br>
		密码:<input type="text" name="password" /><br>
		<input type="submit" value="登陆" /><br>
	</form>
</body>
</html>

CookieUtil.java

package cookie.util;

import javax.servlet.http.Cookie;

public class CookieUtil {
	public static Cookie findCookie(Cookie[] cookies,String name){
		if(cookies!=null){
			for (Cookie cookie : cookies) {
				if(name.equals(cookie.getName())){
					return cookie;
				}
			}
		}
		return null;
	}
}

Cookie_3.java

package c.Cookie;

import java.io.IOException;
import java.util.Date;

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

import cookie.util.CookieUtil;

/*
 	获取最近访问时间
 */
public class Cookie_3 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		if("admin".equals(username)&&"123".equals(password)){
			//获取cookie
			
			Cookie[] cookies=request.getCookies();
			//从数组里找出想要的cookie
			Cookie cookie= CookieUtil.findCookie(cookies, "last");
			if(cookie==null){
				//第一次登陆无cookie
				Cookie cookie2=new Cookie("last",System.currentTimeMillis()+"");
				cookie2.setMaxAge(60*60);
				response.addCookie(cookie2);
				response.getWriter().write("欢迎登陆!");
			}else{
				//第二次登陆,有cookie
				//1.获取以前的cookie
				long lastVisitTime=Long.parseLong(cookie.getValue());
				//2.输出到界面
				//欢迎登陆!上次来访时间为:Wed Nov 14 20:16:02 CST 2018
				response.getWriter().write("欢迎登陆!"+"上次来访时间为:"+new Date(lastVisitTime));
				//3.重置登陆时间
				cookie.setValue(System.currentTimeMillis()+"");
				response.addCookie(cookie);
			}
		}else{
			response.getWriter().write("登陆失败!");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

 

猜你喜欢

转载自blog.csdn.net/zoweiccc/article/details/84204228