局外人1

V1

2022/07/15阅读:22主题:默认主题

Cookie与Session

相同

CookieSession都是用来跟踪浏览器用户身份的会话方式。 二者都是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)次请求到服务器端,浏览器端访问服务器端时就会携带该nameJSESSIONIDCookie对象

(3)服务器端根据nameJSESSIONIDCookievalue(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生成的时候设置进去。

分类:

后端

标签:

后端

作者介绍

局外人1
V1