cookie和session
时间:2022-07-26
本文章向大家介绍cookie和session,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Cookie
cookie主要完成同一会话中不同请求响应间数据传输的任务。cookie是一种消息载体,是在服务器端生成的,首次会以响应报文中传输到客户端,客户端浏览器会将cookie中的内容保存到本地磁盘上,之后再向服务器发送请求时会带着cookie,从而完成多次请求响应中的消息传输问题。
cookie中消息为一组字符串组成的键值对。
使用最为广泛为两个场景为:电商网站的购物车,记住用户名与密码。
@Controller
public class CookieController {
@RequestMapping("/add")
@ResponseBody
public String add(HttpServletResponse response, HttpServletRequest request){
Cookie cookie = new Cookie("name","zyd");
// 设置携带该cookie的路径
cookie.setPath(request.getContextPath() + "/test");
// 设置过期时间为1年并保存到客户端磁盘 ,默认小于0是只保存到内存的
cookie.setMaxAge(60 * 60 * 24 * 365);
response.addCookie(cookie);
return "success";
}
@RequestMapping("/test")
@ResponseBody
public String test(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
StringBuilder sb = new StringBuilder();
for(Cookie cookie : cookies){
sb.append(cookie.getName() + " " + cookie.getValue());
}
return sb.toString();
}
}
Session
与cookie相同也是一种会话跟踪技术,不过session是将会话的状态信息保存到服务器端。
服务器中会为每个会话维护一个session。同一会话一直使用一个session,不同会话使用不同的session。
为了保证上述两目标,session以下步骤运行:
1)写入session列表
session列表底层就是一个map,其key为32长度的随机串,称之为JSessionID,value为session对象的引用。首次提交请求时执行request.getSession()方法后会生成一个session对象。
2)服务器将JsessionId以cookie的方式发送给浏览器
系统会产生name = “JSESSIONID”,32位的随机串作为value 的cookie发送给浏览器。该cookie是不写到硬盘的。
3)客户端接收并发送cookie
之后的请求会带着该cookie。
4)从session列表中查找
根据发送而来的cookie中的“JSESSIONID”的值从Map中查找。
当禁用cookie后,第三步客户端再次给服务请求时不会带着jsessionID,服务器就以为该请求是新的会话,因此会在响应报文中给客户端产生并发送新的sessionid。
- 关于今天很热的--FizzBuzzWhizz
- 了解EF CodeFirst的Migrator功能与Migrator.Net对比
- struts技术的logic标签
- 【翻译】使用Visual Studio创建Asp.Net Core MVC (一)
- 你不知道的Javascript:有趣的setTimeout
- ADO.NET 2.0 中的新增 DataSet 功能
- WinRar 4.20 – 文件扩展名欺骗(0Day)
- 黑掉ATM取款机?只需一条短信
- DNS迭代穷举脚本
- 走进计算机取证分析的神秘世界
- SYNPROXY:最廉价的抗DoS攻击方案
- 如何使用AndroidStudio将开源项目library发布到jcenter
- Android Studio 使用Gradle多渠道打包
- 某些浏览器中因cookie设置HttpOnly标志引起的安全问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JS中的事件循环机制与宏队列、微队列笔记
- Redis 哨兵机制以及底层原理深入解析,这次终于搞清楚了
- SQL 找出分组中具有极值的行
- 接入层Nginx架构及模块介绍分享
- 【问题修复】mds0: Metadata damage detected
- 【服务网格架构】Envoy架构概览(6):异常检测
- 分布式存储Cephfs读取优化方案
- SQL 确定序列里缺失值的范围
- 【问题修复】osd自杀问题跟踪
- mds元信息缓存不释放问题
- 线程安全问题,synchronized 和 ReentrantLock 详细讲解
- Ceph RBD灾备方案对比
- RBD快照灾备方案
- 从条件运算符说起,反思什么是好代码
- Ceph调试开发环境搭建