版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoweiccc/article/details/84204228
Cookie:是服务器给客户端,并且存储在客户端上的一份小数据。
- 应用场景:自动登陆,浏览记录,购物车
- http请求是无状态的。客户端与服务器在通讯的时候,是无状态的,其实就是在客户端在第二次来访的时候,服务器根本就不知道客户端以前有没有来访问过。为了更好的用户体验,更好的交互,其实从公司层面讲,就是为了更好的收集用户习惯。
- Cookie分类:
- 会话Cookie:默认情况下,关闭了浏览器,那么cookie就会消失
- 持久Cookie:在一定时间内都有效,并且会保存在客户端上
- cookie.setMaxAge(0); //设置将cookie立即删除
- Cookie的安全问题:由于Cookie会保存在客户端上,所以有安全隐患;Cookie的大小与个数有限制
- 简单使用过程:
- 发送cookie给客户端
- 给响应添加一个cookie
- 获取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
}
}