Spring cookie 实战(山东数漫江湖)
2024-10-08 22:21:12
Cookie是什么
简单来说,cookie就是浏览器储存在用户电脑上的一小段文本文件。cookie 是纯文本格式,不包含任何可执行的代码。一个web页面或服务器告知浏览器按照一定规范来储存这些信息,并在随后的请求中将这些信息发送至服务器,Web服务器就可以使用这些信息来识别不同的用户。大多数需要登录的网站在用户验证成功之后都会设置一个cookie,只要这个 cookie 存在,用户就可以自由浏览这个网站的任意页面。
为什么需要cookie
因为HTTP协议是无状态的,对于一个浏览器发出的多次请求,Web服务器无法区分是不是来源于同一个浏览器。所以,需要额外的数据用于维护会话。 Cookie 正是这样的一段随HTTP请求一起被传递的额外数据。
如何通过代码操作cookie
新建项目
mvn archetype:generate -DgroupId=com.cookie -DartifactId=SpringCookieTest -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false -DarchetypeCatalog=internal
新增cookie
1
2
3
4
5
6
7
8
9
10
11
12
|
@ResponseBody
@RequestMapping("/addCookie")
public void addCookie(HttpServletRequest request,HttpServletResponse response){
Cookie cookie=new Cookie("test","hello cookie"+System.currentTimeMillis());
cookie.setMaxAge(300);//设置生命周期以秒为单位
//cookie.setDomain("localhost");//设置域名,跨域访问时使用
//cookie.setPath("/");//设置路径,共享cookie时使用
response.addCookie(cookie);
return;
}
|
显示请求中的cookie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@ResponseBody
@RequestMapping("/showCookie")
public void showCookie(HttpServletRequest request,HttpServletResponse response){
Cookie[] cookies=request.getCookies();//获取请求中的所有cookie
if(null!=cookies) {
for (Cookie cookie : cookies) {
//输出cookie的标志(name)和值(value)
System.out.println(cookie.getName() + " - " + cookie.getValue());
}
}
else{
System.out.println("cookies is null");
}
return;
}
|
通过Spring获取特定cookie
1
2
3
4
5
6
7
8
9
10
|
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
@ResponseBody
@RequestMapping("/getCookie")
public void getCookieBySpring(
@CookieValue(value = "test", defaultValue = "hello") String cookie) {
return;
}
|
测试结果
注意事项
如果有操作HttpServletResponse的输出流,要把cookie的操作放在输出流操作之前,不然在浏览器读不到cookie。
最新文章
- 【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案
- JavaScript闭包之“词法作用域”
- jquery.validate的 使用
- SQL中各数据类型的长度、精度
- sqlite--代码操作
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- pom.xml配置详解
- HTML5—canvas绘制图形(1)
- java:Comparable比较器
- UE4 分层材质 Layerd Materials
- Project Euler 75: Singular integer right triangles
- java后台常用json解析工具问题小结
- HBuilder打包React单页面,Android返回功能
- 四:DRF项目开发的准备
- Auto-ML之自动化特征工程
- java基础(二) -对象和类
- Tether USDT 节点钱包的安装与使用-omni layer
- 【刷题】LOJ 6012 「网络流 24 题」分配问题
- SUSE11&;12 永久关闭防火墙
- 解决idea 控制台中文乱码