关于http协议中session和cookie的区别

我知乎上看到一个很简介的总结,以为写得很是好,小结一下:php

image.png浏览器

image.png安全

关于cookie 来自其余网页的一些整理服务器

image.pngcookie

image.pngsession

本身抓包看了一下
当咱们第一次登陆一个网站的时候,服务器会经过http协议里面setcookie的方式,给浏览器发放一个cookie(其实就是一个文件)ide

image.png性能

这就是浏览器保存的cookie
![Uploading image_435150.png . . .]网站

浏览器拿到cookie以后,以后的http请求就会带上cookie。给浏览器标识出本身的身份。spa

2. 关于session

cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

当程序须要为某个客户端的请求建立一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),若是已包含则说明之前已经为此客户端建立过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),若是客户端请求不包含session id,则为此客户端建立一个session而且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

保存这个session id的方式能够采用cookie,这样在交互过程当中浏览器能够自动的按照规则把这个标识发送给服务器。通常这个cookie的名字都是相似于SEEESIONID。但cookie能够被人为的禁止,则必须有其余机制以便在cookie被禁止时仍然可以把session id传递回服务器。

cookie 被禁止时的解决方案:
常常被使用的一种技术叫作URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫作表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时可以把session id传递回服务器。好比:

<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
<input type="text"> 
</form>

实际上这种技术能够简单的用对action应用URL重写来代替。

cookie 和session 的区别:一、cookie数据存放在客户的浏览器上,session数据放在服务器上。二、cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。三、session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。四、单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。