当前位置:网站首页>Cookie与Session
Cookie与Session
2022-07-15 14:31:00 【局外人1】
相同
Cookie和Session都是用来跟踪浏览器用户身份的会话方式。 二者都是web端的会话跟踪技术,Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
工作原理
Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头;有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
Cookie的工作原理
(1)客户浏览器端第一次发送请求(登录请求)到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息(可以保存用户id或者用户名等有关用户的所有信息),然后将该Cookie发送到浏览器端
(3)客户浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据来进行区分不同的会话用户
我这里拿Python Tornado为例:

RequestHandler.set_cookie("name", "kainhuck") #设置cookie
RequestHandler.get_cookie(name, default=None) #获取cookie
RequestHandler.clear_cookie(name, path="/", domain=None) #清空cookie
Session
Session技术则是服务端的解决方案,它是通过服务器来保持状态的。服务器会为Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了
session是保存在服务器端的数据,可以是键值对,也可以是任何数据类型的数据。
session是直译就是会话,保持会话。 http请求是无状态短连接。来一次请求,回一次请求,并断开连接。cookie就解决了第二次请求来时,身份识别
Session的工作原理
(1)客户浏览器端第一次发送请求到服务器端,服务器端创建一个Session实例,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)客户浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
一般session数据保存有以下几种方式:
1.直接存储在cookie(服务器端不保存),例如flask中,默认的session是经过加密保存在cookie中的。
2.在 cookie中保存一个session_id,然后在服务器端通过session_id查询该cookie。
我这里拿Python Django为例:

区别
cookie数据保存在客户端,session数据保存在服务端。
Session
简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。
session中保存的是对象,cookie中保存的是字符串。
session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
Cookie
sessionid是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。
如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。
如果cookie设置了有效值,那么cookie会保存到客户端的硬盘上,下次在访问网站的时候,浏览器先检查有没有cookie,如果有的话,读取cookie,然后发送给服务器。
所以你在机器上面保存了某个论坛cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,放在他机器下面,那么他登陆该网站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
两个都可以用来存私密的东西,session过期与否,取决于服务器的设定。cookie过期与否,可以在cookie生成的时候设置进去。
边栏推荐
猜你喜欢
随机推荐
工业交换机的价格为什么有高低之分?
机器学习引言
CodeBlocks download installation tutorial (complete and detailed)
荷兰蒂尔堡大学、联邦大学 | Neural Data-to-Text Generation Based on Small Datasets: Comparing the Added Value of Two Semi-Supervised Learning Approaches on Top of a Large Language Model(基于小数据集的神经数据到文本生成)
双过程理论与三重心智模型
MySQL时区问题
中金财富开户安全吗 开户有什么用
Pat a 1099 build a binary search tree
使用 DataX 实现 MySQL 数据的高效同步
An inexplicable failure
Send your code into space and develop "the greatest work" with Huawei cloud
Deploy eshopondapr on Tencent cloud eks
工业交换机如何进入web管理界面?
关于Anaconda的一些操作(安装软件和快速打开)
OneNote代码高亮
初识ESP8266(一)————接入点与无线终端模式
2022-07-15日报:Meta宣布推出Make-A-Scene:可基于文字和草图控制AI图像生成
开源数据质量解决方案——Apache Griffin入门宝典
CMSIS-RTOS相关的一些内容
程序员成长第十八篇:项目上线









