介绍一下http请求里的session和cookie吧~
session
session是一种让服务器保存用户登录信息的手段. 服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 即就是用户登陆页面保存的账号和密码以 key-value的形式存储在服务端.
由于http是无状态的, 因此无法记录客户一连串的动作, 必须有一种机制使服务器能认得客户, 这就引入了"会话"的概念.
会话: 是指一个终端用户与交互系统进行通讯的过程. 举个例子: 从输入账户密码进入操作系统到退出操作系统就是一个会话过程.
服务器发给客户一个会话ID, 当客户再次访问服务器时就带着这个ID, 服务器就凭着这个唯一的ID来识别用户.
session代表服务器与浏览器的一次会话过程, 这个过程是连续的, 也可以是时断时续的.
在打开浏览器进行第一次请求时, 服务器会自动为这个请求创建一个session, 并赋予其一个 session id, 然后发送给客户端的浏览器. 以后客户端再次请求本应用中其他资源的时候, 会自动在请求头上添加:(Cookie: SESSION ID = 客户端第一次拿到的session ID), 这样的话, 服务器在接到请求的时候, 就会收到session ID, 并根据ID在内存中找到之前创建的session对象.
但程序需要为某个客户端的请求创建一个session的时候, 服务器首先检查这个客户端的请求里是否包含了session id, 如果已经包含一个session id, 则说明以前已经为此客户创建过session, 服务器就按照session id把这个session检索出来使用. 如果检索不到, 可能会新建一个, 这种情况可能出现在服务端已经删除了该用户对应的 session 对象.
由于关闭浏览器不会导致session被删除, 迫使服务器为session设置了一个失效时间, 当距离客户端上一次使用session的时间超过这个失效时间时, 服务器就可以认为客户端已经停止了活动, 才会把session删除以节省存储空间.
session的作用: 保持当前会话的安全. session的信息是保存在服务端的(一般是保存在服务端的内存), 用户请求是通过session ID进行请求, 每次请求服务器会根据session ID进行身份验证.
cookie
cookie本质是保存客户端信息的一种方式, 由浏览器来维持. cookie如果不设置过期时间, 那么生命周期为浏览器会话期间, 否则生命周期会一直持续到浏览器关闭. 只要关闭浏览器窗口, cookie就消失了
cookie的作用: 将用户的信息保存在客户端
cookie的一般使用场景: 一般网站上, 当客户端登录页面的时候, 可以通过客户端代码直接从本地文件夹获取到登录信息, 帮助填充到他自己表单的账号密码里面去, 而不用自己手动输入.
区别:
1. session存放在服务器端, cookie以文本文件格式存放在客户端浏览器上
2. session会随着会话的结束而关闭, cookie则存放在客户端浏览器上长期有效.
cookie就相当于外用硬盘, 暂时记录信息, 可删除. session存在于内存中, 不会由于退出就消失
3. session保存的是对象, cookie保存的是字符串
4. 可以轻松访问cookie值, 但是我们无法轻松访问session会话值. 是因为存放在cookie里的信息容易泄露, 通常只保存不重要的信息, 因此session更安全, 重要信息放在session中.
5. 因为每次发起http请求, 都要携带有效cookie信息, 所以cookie一般都有大小限制, 以防止增加网络压力, 一般不超过4K