博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
了解Cookie和Session
阅读量:4097 次
发布时间:2019-05-25

本文共 1940 字,大约阅读时间需要 6 分钟。

说明

本文通过参考其他优秀博文和谢希仁编著的《计算机网络》对Cookie和Session进行总结

正文

      在一文中,我们了解到HTTP是无状态的,服务器无法通过连接跟踪识别用户。因此,采用Cookie和Session技术来跟踪用户会话。

Cookie是通过客户端记录的信息确定用户的信息。

Cookie的工作原理:
      当某一用户浏览某个使用Cookie的网站时,该网站的服务器就为该用户产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在给该用户的HTTP响应报文中添加一个叫做Set-cookie的首部行。这里的“首部字段名”就是“Set-cookie”,而后面的”值“就是赋予该用户的”识别码“。ex: Set-cookie:12345678
      当用户收到这个响应时 ,其浏览器就在它管理的文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面的识别码。当该用户继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从其Cookie文件中取出这个网站的识别码,并放到HTTP请求报文的Cookie首部行中,这样网站就可以跟踪该用户在该网站的活动。

Cookie具有不可跨区域性:每个网站服务器只能操作自己赋予的Cookie,不能操作其它服务器赋予的Cookie.

ex:Google会向用户赋予一个Cookie,当该用户登录baidu时,baidu也会赋予用户一个Cookie,此时Googel是不能操作baidu赋予的Cookie,baidu同样如此。

Cookie有效期

Cookie的maxAge属性决定Cookie的有效期,单位为秒(second)。
若该值为正数,则表示会在maxAge秒后失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。
若该值为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口有效,关闭窗口后该Cookie失效。Cookie默认值为-1
若值为0,则表示删除该Cookie。

Session

Session是使用服务端记录用户(客户端)状态信息的一种机制,使用上比Cookie简单些,但是增加了服务器的存储压力。

在客户端访问服务器时,服务器将客户端的信息以某种形式记录在服务器中,这就是Session。当客户端再次访问时只需要在Session中查找该空户的状态就可以了。

Session的生命周期

      一般情况下,用户首次访问服务器时,服务器会给用户分配一个sessionID来唯一标识这个用户,每个用户具有不同的sessionID。
      只有在访问jsp,servlet等程序时才会创建session,只访问html等静态资源并不创建session。
      Session保存在客户端,为了获得更高的存取速度,服务器一般把Session存储在内存中。为了防止内存溢出,服务器会把内存中长时间没有活跃的Session删除,这个时间就是Session的超时时间,如果超过了超时时间没有访问过服务器,Session自动失效。用户每访问服务器一次,都认为该用户的Session“活跃(active)”了一次。

Session对浏览器的要求:

      Session虽然是保存在服务器上,对客户端是透明的,但正常运行仍需要客户端的支持,因为Session需要使用Cookie作为识别标志。服务器会向客户端浏览器发送一个名为JSESSIONID的Cookie,值为该Session的id(也就是HttpSession.getId()的返回值),Session依据该Cookie来识别是否为同一用户。
      在许多服务器上,如果浏览器支持Cookie,就直接使用Cookie,如果浏览器不支持或禁止了Cookie,就自动转化为URL-rewriting(重写URL)。

重写URL

URL地址重写的原理是将该用户Session的id信息重写到URL地址中,服务器能够解析重写后的URL获取Session的id。

Cookie和Seesion的区别:

(1)Cookie数据存放在客户端浏览器上,Session数据存放在服务器中

(2)Cookie安全性低,别人可以分析存放在本地Cookie文件进行Cookie欺骗,Session相对比较安全
(3)Session存放在服务器,当访问增多,会给服务器带来存储压力,影响服务器性能
(4)在客户端,一个浏览器能创建的Cookie数量最多为300个,并且每个不能超过4KB,每个Web站点能设置的Cookie总数不能超过20个
(5)综上,将登录信息等重要的信息存放在Session中,将其它信息若要保留,存放在Cookie中。

转载地址:http://oceii.baihongyu.com/

你可能感兴趣的文章
记一次sentry部署过程
查看>>
python 开发环境配置
查看>>
Docker 部署Django项目
查看>>
Docker部署Vue 工程包
查看>>
CentOS7使用Docker Overlay存储驱动并更改日志驱动
查看>>
CentOS7修改Docker镜像默认存储位置
查看>>
python 变量进阶(理解)
查看>>
scrapy 框架入门
查看>>
scrapy爬取伯乐在线文章
查看>>
Scrapy Item Loaders使用方法
查看>>
Yum自动下载RPM包及其所有依赖的包
查看>>
Docker 容器 时区 及容器语言设置
查看>>
Kubernetes集群搭建之系统初始化配置篇
查看>>
Kubernetes集群搭建之企业级环境中基于Harbor搭建自己的私有仓库
查看>>
Kubernetes集群搭建之Etcd集群配置篇
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>