Cookie 和 Session 的区别
一、共同之处
cookie 和 session 都是用来跟踪浏览器用户身份的会话方式。
二、工作原理
1、Cookie 的工作原理
- 浏览器端第一次发送请求到服务器端
- 服务器端创建 Cookie,该 Cookie 中包含用户的信息,然后将该 Cookie 发送到浏览器端
- 浏览器端再次访问服务器端时会携带服务器端创建的 Cookie
- 服务器端通过 Cookie 中携带的数据区分不同的用户
2、Session 的工作原理
- 浏览器端第一次发送请求到服务器端,服务器端创建一个 Session,同时会创建一个特殊的 Cookie(name 为 JSESSIONID 的固定值,value 为 session 对象的 ID),然后将该 Cookie 发送至浏览器端
- 浏览器端发送第 N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该 name 为 JSESSIONID 的 Cookie 对象
- 服务器端根据 name 为 JSESSIONID 的 Cookie 的 value(sessionId),去查询 Session 对象,从而区分不同用户。
name 为 JSESSIONID 的 Cookie 不存在(关闭或更换浏览器),返回 1 中重新去创建 Session 与特殊的 Cookie
name 为 JSESSIONID 的 Cookie 存在,根据 value 中的 SessionId 去寻找 session 对象
value 为 SessionId 不存在(Session 对象默认存活 30 分钟),返回 1 中重新去创建 Session 与特殊的 Cookie
value 为 SessionId 存在,返回 session 对象
Session 的工作原理图
三、区别
cookie 数据保存在客户端,session 数据保存在服务端。
session
简单的说,当你登陆一个网站的时候,如果 web 服务器端使用的是 session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话 sessionid,服务器根据当前 sessionid 判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。
cookie
sessionid 是服务器和客户端连接时候随机分配的,如果浏览器使用的是 cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了 cookie 用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为 cookie 变量,所以只要不关闭浏览器,那么 cookie 变量一直是有效的,所以能够保证长时间不掉线。
如果你能够截获某个用户的 cookie 变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用 cookie 被攻击的可能性比较大。
如果 cookie 设置了有效值,那么 cookie 会保存到客户端的硬盘上,下次在访问网站的时候,浏览器先检查有没有 cookie,如果有的话,读取 cookie,然后发送给服务器。
所以你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的 cookie 拷走,放在他机器下面,那么他登陆该网站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接 copy cookie 文件到 cookie 目录,浏览器是不认的,他有一个 index.dat 文件,存储了 cookie 文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie 文件,并且要从保证时间上骗过浏览器
两个都可以用来存私密的东西,session 过期与否,取决于服务器的设定。cookie 过期与否,可以在 cookie 生成的时候设置进去。
四、区别对比
- cookie 数据存放在客户的浏览器上,session 数据放在服务器上
- cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗,如果主要考虑到安全应当使用 session
- session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用 COOKIE
- 单个 cookie 在客户端的限制是 3K,就是说一个站点在客户端存放的 COOKIE 不能 3K。
- 所以:将登陆信息等重要信息存放为 SESSION;其他信息如果需要保留,可以放在 COOKIE 中
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于