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

基础网络详解4--HTTP CookieSession 思考

一、cookie技术思考

    一台多用户浏览器发起了三笔请求,将某款产品放入购物车中,A一次,选择了篮球;B两次,第一次选了足球,第二次选了钢笔。如何确认选择篮球、足球、钢笔的请求属于谁呢?如果不确认属于谁,请求将没有意义。
    如果每次请求都带一个用户标识,比如用户名,这样服务器就会知道该请求属于谁,也会知道请求的商品属于谁,也就知道了该如何记录。于是cookie诞生了,使得无状态的http服务,变成了有状态的http服务。

1、加入购物车需要验证密码或者登陆状态吗?

    我们先来看不需要的情况,因为用户名是很容易获取到的,如果别人获取了你的用户名,他们也可以在你的购物车中添加东西,这样来看是很不安全的。所以验证密码或者验证登陆状态时有必要的。
    需要验证密码。如果采用验证密码的方案,就需要在cookie中携带密码,这是很不安全的,并且在每次请求的时候都要验证一下密码是否正确,这样会降低处理效率。 那选另一种方案验证登陆状态呢?

2、如何确保登陆状态的唯一性。

    当客户登陆的时候我们可以在服务器的内存或者文件中存储客户登陆的状态,比如用户名和过期时间等,但是只存储这些同样是不安全的,因为其他用户会很轻松的获取你的用户(因为用户是有规律的),所以就需要确保登陆状态的唯一性,于是seesion诞生了。

二、session技术思考

    当客户登陆的时候,服务端会生成一个session,该session有一个全局唯一的sessionid,并且该sessionid会存储客户的相关信息,登陆状态,以及过期时间,并会将sessionid设置在cookie中,并返回给客户端。这样客户每次发起请求的时候都会带着该sessionid, 该sessionid可以使http服务变成有状态的,并且保证了唯一性和确保登陆状态,sessionid很难被其他用户获取。
    从上述来看session机制是依赖cookie的,如果禁用cookie,session的作用就失去了大半,虽然可以把sessionid放在请求的头部,但是这样会不方便。
java服务器中的sessionid JSESSIONID=xxxxxxxxxxxx
PHP服务器中的PHPSESSIONID=xxxxxxxxxxxxxxxxxxxxxx

三、两者的区别

1、存储位置

cookie存储在客户端、最大为4kb,网站的免密登陆就是在cookie里面存储密码;
session存储在服务器端,大小没限制,作用域可以共享;

2、大小限制

cookie的大小有限制,最大为4kb;
session大小没限制;

3、作用域

cookie由于浏览器的同源策略,只有同源的情况下才会发送;
session在服务端理论上可以进行多域共享

一般来说,cookie与session是相辅相成,是http服务器认证中的两个部分,是同一种技术中的两部分,两者并没有区别之分。

四、session的限制

当用户越来越多,seesion也会越来越多,会增加服务器的负担, 并且扩展性低,在微服务架构中,因为seesion只存在一台服务器上,如何确保所有的服务都能访问到该session呢?

1、session复制

2、session粘连

当session在机器A生成之后,之后所有的请求都会到机器A

3、seesion共享

可以将seesion存储在redis中,这样服务就都可以访问到。

http://www.lryc.cn/news/133937.html

相关文章:

  • 14. 利用Canvas自制时钟组件
  • 微信小程序使用云存储和Markdown开发页面
  • 【C++】运算符重载 | 赋值运算符重载
  • Python学习 -- 类对象从创建到常用函数
  • 数组分割(2023省蓝桥杯)n种讨论 JAVA
  • 很好的启用window10专业版系统自带的远程桌面
  • TCP定制协议,序列化和反序列化
  • YOLOX在启智AI GPU/CPU平台部署笔记
  • 23种设计模式攻关
  • 【jsthreeJS】入门three,并实现3D汽车展示厅,附带全码
  • unity将结构体/列表与json字符串相互转化
  • 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程
  • 【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)
  • MATLAB算法实战应用案例精讲-【深度学习】模型压缩
  • Matlab使用
  • BladeX多数据源配置
  • go里面关于超时的设计
  • Qt下使用ModbusTcp通信协议进行PLC线圈/保持寄存器的读写(32位有符号数)
  • ElasticSearch学习2
  • 3D角色展示
  • 前端面试:【Angular】打造强大Web应用的全栈框架
  • 数据结构:栈和队列
  • SpringCloud Gateway服务网关的介绍与使用
  • 深入解析:如何打造高效的直播视频美颜SDK
  • 每日一博 - MPP(Massively Parallel Processing,大规模并行处理)架构
  • ssh框架原理及流程
  • eslint 配置和用法
  • 字符设备驱动实例(PWM和RTC)
  • Ribbon 源码分析
  • 【1-3章】Spark编程基础(Python版)