一、cookie的概念
Cookie是一种存储在客户端浏览器中的数据,用来跟踪用户状态。Cookie数据会在用户与服务器之间来回传递,因此它可以用来记录用户登录状态、存储用户偏好等信息。
Session是一种在服务器端存储数据的技术。当用户登录成功后,服务器会创建一个session对象并将其关联到用户的会话中。当用户再次请求服务器时,服务器会根据请求中的session ID来确定用户的身份,并且恢复出用户在会话中的状态。
二、什么是有状态会话?
什么是无状态会话?
无状态会话
三、利用后端设置cookie
1、setCookie
package test;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class SetCookie*/ @WebServlet("/SetCookie") public class SetCookie extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public SetCookie() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//服务器创建cookie对象Cookie cookie=new Cookie("account","admin");//设置cookie有效期cookie.setMaxAge(60*60);//将cookie相应给客户端response.addCookie(cookie);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}
2、getCookie
package test;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; // 修改:导入正确的 Cookie 类 import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class GetCookie*/ @WebServlet("/GetCookie") public class GetCookie extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public GetCookie() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取所有的CookieCookie[] cookies = request.getCookies();// 检查是否有cookieif (cookies != null) {for (int i=0;i<cookies.length;i++) {System.out.println(cookies[i].getName() + "-->" + cookies[i].getValue()); // 修正:使用cookie.getValue()if(cookies[i].getName().equals("account")) {System.out.println("yes");}}} else {System.out.println("没有找到任何cookie");}}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 调用doGet方法doGet(request, response);}}
四、利用前端写cookie
我们需要先导入cookie的库
有两种方法可以导入
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="js/jquery.js"></script> <script src="js/jquery.cookie.js"></script>
在前端导入cookie的包,然后在<script><\script>标签里面进行操作,例如:
<script>document.cookie="eat=apple;max-age="+30*60console.log(document.cookie)$.cookie('color', 'red', { expires: 7 }); // $.cookie() 括号里面不传参,即获取所有// $.removeCookie() 删除 cookie </script>
$.removeCookie() 删除 cookie
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="js/jquery.js"></script> <script src="js/jquery.cookie.js"></script> <script>document.cookie="eat=apple;max-age="+30*60console.log(document.cookie)$.cookie('color', 'red', { expires: 7 }); // $.cookie() 括号里面不传参,即获取所有$.removeCookie('eat') </script> </head> <body></body> </html>