一、什么是cookie
cookie在客户端存储,session在服务端存储
一旦浏览器保存了某一个cookie,在之后的响应的请求于回应种,cookie会跟着请求传到服务端,然后跟着响应传回客户端 ,跟着request和response传来传去;这样就可以通过cookie这个载体完成客户端与服务端的数据交换
二、cookie的创建
Cookie cookie = new Cookie(String key,Sring value);
Cookie cookie = new Cookie("name","zhangsan");
//传递cookie
response.setCookie(cookie );
第一次请求的时候,request Headers并没有zhangsan
response的时候给张三带过去,再次请求的时候就会有zhansan了
访问同一个项目的其他文件也会有这个cookie
此时要是在其他jsp文件中再写入一个cookie
Cookie cookie = new Cookie("name","Tom");
//传递cookie
response.setCookie(cookie );
然后访问这个name为tom的jsp文件,首先浏览器第一次还是保存第一次的cookie,但是第二次name就会覆盖为tom
三、读取cookie
Cookie[] cookie = request.getCookies();
for(Cookie cookie:cookies){
//out.write(ookie.toString());
out.write(cookie.getName()+":"+cookie.getValue()+"<br>");
}
四、Cookie的常用方法:
void setMaxSge(int age)
//设置cookie的有效时间,单位为秒,默认为-1
int getMaxSge(
//获取cookie的有效时间
System.out.println(cookie[0].getMaxSge())
String getName()
//获取cookie的name
String getValue()
//获取cookie的value
五、session与cookie的区别
1.cookie
cookie在客户端存储;
保存的数据是String,因为cookie是类似与的文本文件;
可以长期保存在浏览器中,与会话无关;
保存的是不重要信息
2.session
session在服务端存储;
保存的数据是Object类型;
session会随着会话结束而销毁;
保存的是重要信息
3.cookie的生命周期
void setMaxSge(int age)
//设置cookie的有效时间,单位为秒,默认为-1
-1:关闭浏览器就会删除cookie
4.实验
使用session实现,用户登录,如果用户名密码正确,则跳转到首页(转发),并且展示用户名,错误则重新回到登录页面(重定向)
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>hello</h1>
<form action="/cookie_test" method="post">
用户名:<input type="text" name="username">
<br>
密码:<input type="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</html>
cookie_test.java
package test;
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;
import java.io.IOException;
//@WebServlet(name = "cookie_test",urlPatterns = "/cookie_test")
public class cookie_test extends HttpServlet {
private String name = "admin";
private String password = "123";
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals(this.name)&&password.equals(this.password)){
//添加cookie
Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
response.sendRedirect("cookie_welcome.jsp");
}else{
response.sendRedirect("index.jsp");
}
}
}
cookie_welcom.jsp
<%--
Created by IntelliJ IDEA.
User: fate
Date: 2024/4/24
Time: 22:30
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("username")){
out.write("<h1>欢迎回来</h1><br>"+cookie.getValue());
}
}
%>
<br>
<a href="/layout">退出登录</a>
</body>
</html>
layout.java
package test;
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;
import java.io.IOException;
//@WebServlet("/layout")
public class layout extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("即将返回登录页面!");
Cookie[] cookies = req.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("username")){
cookie.setMaxAge(0);
resp.addCookie(cookie);
resp.sendRedirect("index.jsp");
}
}
}
}
web.xml
<!-- 添加地址映射,使得客户端可以访问到后端的java文件-->
<servlet>
<servlet-name>cookie_test</servlet-name>
<servlet-class>test.cookie_test</servlet-class>
</servlet>
<servlet>
<servlet-name>layout</servlet-name>
<servlet-class>test.layout</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookie_test</servlet-name>
<url-pattern>/cookie_test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>layout</servlet-name>
<url-pattern>/layout</url-pattern>
</servlet-mapping>
总结
session
setAttiibute("name","admin") 存
setAttiibute("name") 取
session.invalidate() 删除登录信息,退出登录
声明周期:服务端,只要web应用重启就销毁;客户端,只要浏览器关闭就销毁
cookie
存操作
Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
取操作
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("username")){
out.write("<h1>欢迎回来</h1><br>"+cookie.getValue());
}
}
退出登录,删除登录信息:cookie.setMaxAge(0);
Cookie[] cookies = req.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("username")){
cookie.setMaxAge(0);
resp.addCookie(cookie);
resp.sendRedirect("index.jsp");
}
}
生命周期:不随服务端的重启而销毁,客户端默认关闭浏览器就销毁,但是可以通过setMaxSge(),就不会关闭浏览器就销毁,而由设置的时间来觉得