当前位置: 首页 > news >正文

会话管理——Cookie

        会话管理在人机交互中扮演着至关重要的角色,它是指保持用户的整个会话活动的互动与计算机系统跟踪过程。以下是对会话管理的简单介绍:

会话主要分为两类:有状态会话(知道对方身份)和无状态会话(不知道对方身份)

浏览器HTTP请求本身为无状态的

无状态会话只是接收到了四个请求 。而有状态会话接收四个请求并且可以区分发送请求的对象。

那么如何实现有状态的会话呢? 

那么就需要会话管理中的cookie和session了

cookie:客户端技术,将状态保存在客户端

session: 服务端技术,将状态保存在服务端

 具体过程

cookie:服务器创建的通过响应发送给客户端并保存在浏览器上的一小段信息,浏览器在下次向服务器发送请求时,这段信息被携带并发送到服务器上。如图所示:

cookie可以既可以在后端设置也可以在前端设置。

 后端具体操作:现在我们建一个servlet,命名为SetServlet,在doGet函数中写入

        //服务端创建cookie Cookie cookie=new Cookie("account", "admin");//Cookie cookie2=new Cookie("key", "qqqqq");//设置cookie有效期 单位为s//>0,表示有效期。=0,表示删除cookie。<0,表示会话cookiecookie.setMaxAge(60*60);//将cookie响应给客户端response.addCookie(cookie);

我们可以在网页中看到该cookie 

 前端具体操作:在HTML文件里,用javascript设置获取cookie:

                 document.cookie="变量名=变量值",这样

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>document.cookie="account=admin"
document.cookie="password=123456;"
document.cookie="key=value;max-age="+60*60</script>
</head>
<body></body>
</html>

要获取某一项获取cookie

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">function getCookie(key){var arr = document.cookie.split(";")//var arr = document.cookie.split("; ")也可以去空格for(var i=0;i<arr.length;i++){arr[i]=arr[i].trim()  //去空格if(arr[i].indexOf(key)==0){return arr[i].substring((key.length+1))}}console.log(arr)return ""
}console.log(getCookie("password"))</script>
</head>
<body></body>
</html>
  • split()将字符串分割为字符串数组
  • trim()去掉字符串前后的空格
  • indexOf() 判断有没有这个字符串,有返回匹配的第一个字符串的第一个位置。没有返回-1
  • indexOf(string,n) 表示跳过n个元素后去查找这个字符串
  • lastIndexOf() 判断有没有这个字符串,有返回匹配的最后一个的第一个位置。没有返回-1
  • subString(a,b)从a到b字符串裁剪

cookie优缺点分析:

优点:

可以设置到期规则,cookie默认在过期之前一直保存在浏览器上
cookie包含简单的键值对

缺点:

大小受限制,一般是4kb 8kb
在同一个域名下cookie的总数量有限制
而且cookie可以设置禁用,在浏览器中
cookie有潜在的安全风险,因为cookie可以被篡改


http://www.mrgr.cn/news/56704.html

相关文章:

  • 10个巴西消费者中有7个买过中国商品,速卖通联手菜鸟给商家的好消息
  • 【办公类-57-01】美工室材料报销EXCEL表批量插入截图(图片)
  • OriginOS 5深度体验:这款新系统,真的有点东西
  • 【python】OpenCV—findContours(4.2)
  • 如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)
  • 【C++刷题】力扣-#346-数据流中的移动平均值
  • vue常用的修饰符作用与使用场景总结
  • 云上大数据架构是什么?
  • 已集成工作流引擎的低代码平台(源码获取,JAVA,Vue)
  • WPF LiveChart控件基础属性介绍
  • 代码随想录算法训练营第五天| 哈希表理论基础 454.四数相加II 383.赎金信 15.三数之和 18.四数之和
  • 【C++】STL----map和set
  • RAD Studio 12.2 Athens Inline Patch 1 已可下载更新
  • 在嵌入式开发领域,有哪些好用的国产工具?
  • vllm源码解析(六):采样策略分析
  • Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)
  • 【运维自动化-作业平台】如何使用全局变量之主机列表类型?
  • C++模板编程:使用模板实现高效泛型算法
  • 情怀程序员,没有套路的坐下和大家掏心窝聊聊今年的1024 | 程序员节
  • 软考系统分析师知识点二十:系统安全性分析与设计
  • pycharm配置git版本控制
  • java-如何对vo里面的字段或者Map里面数据进行排序
  • Redis-05 Redis哨兵高可用架构原理与搭建
  • C语言-文件读写代码详解
  • 【汇编语言】第一个程序(一)—— 一个源程序从写出到执行的过程
  • WPF修改应用程序桌面图标