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。

最新文章

  1. 【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案
  2. JavaScript闭包之“词法作用域”
  3. jquery.validate的 使用
  4. SQL中各数据类型的长度、精度
  5. sqlite--代码操作
  6. C语言中字符串如何转换为二进制、八进制、十进制、十六进制
  7. pom.xml配置详解
  8. HTML5—canvas绘制图形(1)
  9. java:Comparable比较器
  10. UE4 分层材质 Layerd Materials
  11. Project Euler 75: Singular integer right triangles
  12. java后台常用json解析工具问题小结
  13. HBuilder打包React单页面,Android返回功能
  14. 四:DRF项目开发的准备
  15. Auto-ML之自动化特征工程
  16. java基础(二) -对象和类
  17. Tether USDT 节点钱包的安装与使用-omni layer
  18. 【刷题】LOJ 6012 「网络流 24 题」分配问题
  19. SUSE11&12 永久关闭防火墙
  20. 解决idea 控制台中文乱码

热门文章

  1. java — 线程池
  2. 大型网站架构演化(六)——使用反向代理和CDN加速网站响应
  3. 解决编写 xml 没有代码提示
  4. Shell中sort-cut-wc详解
  5. 前端开发学习之——使用jquery/javascript判断及改变checkbox选中状态
  6. Mysql 基本语句练习
  7. 如何正确实现Page接口分页,用PageImpl 自定义分页
  8. 【题解】SDOI2017树点涂色
  9. [ZJOI2011]最小割 & [CQOI2016]不同的最小割 分治求最小割
  10. POJ1284:Primitive Roots——题解