iOS面试题收纳-网络之Cookie&Session

49 阅读4分钟

说一下Session 和 Cookie 的概念

  • Session 是服务器用来认证、追踪用户的数据结构,通过判断客户端传来的信息确定用户,确定用户唯一标志是客户端传来的 SessionId
  • Cookie 是客户端用来保存用户信息的机制,初次会话时,http 协议会在 Cookie 里记录一个SessionID,之后每次会话时把 SessionID发给服务器
  • Session 一般用于用户验证,它默认存储在服务器的一个文件里,当然也可以存储在内存数据库里
  • 若是客户端禁用了Cookie,则客户端会用URL重写技术,即会话时在URL的末尾加上 SessionID发给服务器

Cookie

  1. HTTP协议是无状态的,服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器
  2. cookie主要是用来记录用户状态,区分用户,状态保存在客户端
交互过程

http_cookie.png

  1. 首次访问amazon时,客户端发送一个HTTP请求到服务器端 。服务器端发送一个HTTP响应到客户端,其中包含Set-Cookie头部
  2. 客户端发送一个HTTP请求到服务器端,其中包含Cookie头部。服务器端发送一个HTTP响应到客户端
  3. 隔段时间再去访问时,客户端会直接发包含Cookie头部的HTTP请求。服务器端发送一个HTTP响应到客户端
cookie技术有4个组件
  • 在HTTP响应报文中的一个cookie首部行
  • 在HTTP请求报文中的一个cookie首部行
  • 在用户端系统中保留一个cookie文件,并由用户的浏览器进行管理
  • 位于Web站点的一个后端数据库

也就是说,cookie功能需要浏览器的支持。如果浏览器不支持cookie(如大部分手机中的浏览器)或者把cookie禁用了,cookie功能就会失效。

修改和删除
  1. 在修改cookie的时候,只需要新cookie覆盖旧cookie即可,在覆盖的时候,由于Cookie具有不可跨域名性,注意name、path、domain需与原cookie一致
  2. 删除cookie也一样,设置cookie的过期时间expires为过去的一个时间点,或者maxAge = 0(Cookie的有效期,单位为秒)即可
cookie怎么加强安全

cookie并不安全

  1. secure属性为true,仅允许在HTTPS和SSL等安全协议中传输此类Cookie
  2. 在程序中对Cookie内容加密、解密
  3. 设置cookieHttpOnly,防止js脚本读取cookie,可以有效的防止**XSS(跨站脚本攻击)**攻击

Session

  1. Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

  2. Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器,而Session保存在服务器

  3. 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session

  4. 客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

http_session.png

交互过程
  1. 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为SessionId
  2. 如果已包含则说明以前已经为此客户端创建过session,服务器就按照SessionId把这个session检索出来,使用(检索不到,会新建一个)
  3. 如果客户端请求不包含SessionId,则为此客户端创建一个session并且生成一个与此session相关联的SessionIdSessionId的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个SessionId将被在本次响应中返回给客户端保存。
  4. 保存这个SessionId的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把SessionId传递回服务器。

Cookie 和Session 的区别

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. cookie相比session不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用cookie
  4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。而session存储在服务端,可以无限量存储
  5. 将登录信息等重要信息存放为session;其他信息如果需要保留,可以放在cookie