一.cookie相关知识
1.会话技术
让服务能够识别到已经访问过的客户端
2.cookie
客户端会话技术,服务器生成一段文本信息,发给客户端,客户端下次访问的时候带上这段文本信息,服务器就会识别到
3.cookie机制
用户第一次访问应用时,服务器生成一个cookie,通过http响应返回给浏览器,是通过响应头Set-Cookie来传递的。浏览器下次访问同一个网站时会自动携带cookie信息,通过请求头携带cookie,服务端如果能够获取到cookie,就可以识别到这个用户
4.cookie的创建和发送
可以同时创建两个cookie
二.使用cookie
1.创建包,其下创建类,生成cookie,具体代码如下
package com.hhh.cookie;
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 java.io.IOException;
public class MyCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//生成cookie,直接new一个对象,cookie本身是一键值对,里面存两值
Cookie cookie=new Cookie("mycookie","hhh");
//发送给客户端,通过resp对象发送
resp.addCookie(cookie);
resp.getWriter().print("send cookie success");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
2.在web.xml文件中配置servlet
<servlet>
<servlet-name>MyCookie</servlet-name>
<servlet-class>com.hhh.cookie.MyCookie</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyCookie</servlet-name>
<url-pattern>/cookie</url-pattern>
3.启动tomcat,按F12查看,其中Set-Cookie中的值就是服务器返回给我们的cookie值
4.再次请求,第一次访问生成cookie,第二次访问浏览器时就会带上cookie值
5.另外创建一个类用来展示,第一次访问和第二次访问浏览器时cookie的变化
1.创建类,代码如下
package com.hhh.cookie;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CookieDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("Second");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
2.配置servlet
<servlet>
<servlet-name>cookieDdemo</servlet-name>
<servlet-class>com.hhh.cookie.CookieDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookieDdemo</servlet-name>
<url-pattern>/cookie1</url-pattern>
</servlet-mapping>
3.启动tomcat
1)第一次请求设置cookie
2)第二次访问带上cookie
三.cookie的获取
1.在CookieDemo.java文件中演示如何获取cookie
1.具体代码如下
package com.hhh.cookie;
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 java.io.IOException;
public class CookieDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取cookie,cookie通过请求头传递,就通过请求对象去获取
Cookie[] cookies = req.getCookies(); //获取cookie的数组
//循环cookie的数组,获取cookie
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+"--"+cookie.getValue());
}
resp.getWriter().print("Second");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
2.启动tomcat
3.查看idea的server
第一个cookie值为idea自己生成的,第二个cookie值是设置的
4.cookie的有效时间
1.默认情况,当浏览器关闭当前网站时,cookie的数据就会被销毁
2.当cookie的maxAge属性是整数,单位为秒,cookie会被持久化到本地,在指定的时间内有效,即使关闭浏览器也是有效的
3.maxAge为负数(默认值,浏览器关闭后当前网站的cookie数据就会被销毁)
4.maxAge为0,表示立即删除当前cookie
5.cookie的特点
1.最大能存4k的数据,同一个网站存20个
2.存在客户端,不安全,存不敏感信息
四.Cookie案例——记住访问时间
1.在CookieDemo.java文件中演示,具体代码如下
package com.hhh.cookie;
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 java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CookieDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//先获取cookie,第一次访问生成cookie,第二次访问时如果cookie里头包含时间(lastTime=2022-9-22),就证明登录过
Cookie[] cookies = req.getCookies();
if(null!=cookies){
for (Cookie cookie : cookies) {
if("lastTime".equals(cookie.getName())){
//有一个符合条件的cookie,该返回
//中文设置
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("欢迎回来,上次访问时间:"+cookie.getValue());
return ;
}
}
}
//循环跑完没有符合条件的结果就证明你是第一次访问
//第一次访问,就需要去创建一个cookie
//新建时间, 日期格式化
Date date=new Date();
//注意这里的时间格式,dd和HH中间不要有空格,有空格报错
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
String format = sdf.format(date);
Cookie cookie=new Cookie("lastTime",format);
cookie.setMaxAge(180);
resp.addCookie(cookie);
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("欢迎访问");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
2.运行效果如下