Session与Cookie
Cookie
存储在客户端
但用户第一次访问服务端的时候,服务器会生成一小块数据,然后把这个数据发送到浏览器的Cookie中,浏览器进行存储后,下面的每一次请求都会携带Cookie中的内容一起发送到服务器。
当接收到客户端发出的 HTTP 请求时,服务器可以发送带有响应的
Set-Cookie
标头,Cookie 通常由浏览器存储
Cookie持久化
==Cookie==可以设置到期日期,因此可以分为 ==Session Cookie== 和==Persistent Cookie==,
- 如果没有设置到期日期,则把Cookie设置为会话Cookie,会话Cookie会存储在内存中,浏览器关闭即永久丢失
- 如果设置了到期日期==Expires 和 Max-age==,那么Cookie会在到期日期后过期
- 所以无论如何都会过期,只是时间长短而已
Cookie的应用
会话管理
登录,购物车,游戏得分或者服务器应该记住的其他内容
个性化
用户偏好,主题或者其他设置
追踪
记录和分析用户行为
Secure / httpOnly
安全问题
- Secure 用于加密Cookie,Cookie本身是不加密的,所以要进行加密操作,但是无论如何,他都是不安全
- HttpOnly 用于指定Cookie时候可通过客户端脚本访问
Domain / Path
==Domain/Path==指定了Cookie的作用域,表明Cookie应该发送给哪些URL
Session
数据存储在服务端,会相对安全,但是对服务器的负载大
Session在服务器端程序运行的过程中创建的,创建Session的同时,服务器会为该Session生成唯一的session id, 这个session id在随后的请求中会被用来重新获得已经创建的Session
当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面。
当客户端再次发送请求的时候,会将这个session id带上, 服务器接受到请求之后就会依据session id找到相应的Session,从而再次使用Session
Session 通常有一个默认的过期时间(如 30 分钟),若超出该时间未进行交互,Session 将失效
Cookie和Session如何去选择
- Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;
- Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;
- 对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。
- cookie的生命周期当浏览器关闭的时候,就消亡了
(1)cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束,
(2)session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁 - cookie:大小受浏览器的限制,很多是是4K的大小, session:理论上受当前内存的限制
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Echin の 博客!