HTTP无状态 session cookie token

HTTP无状态协议,是指协议对于交互性场景没有记忆能力 。对于一模一样的两个接口,不同的人在请求第二个接口时可能会基于请求第一个接口的结果而有所不同 。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量很大 。

让服务器有记忆能力之 Cookie、Session:

交互需要承前启后的,两种用于保持HTTP连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session ,两者为交互存储状态 。

由于 HTTP 是一种无状态的协议,服务器单纯从网络连接上无从知道客户身份 。怎么办呢 ?就给客户端颁发一个通行证吧,每人一个,无论谁访问都必须携带自己的通行证 。这样服务器就能从通行证上确认客户身份了 。这就是 Cookie 的工作原理 。Cookie 实际上是一小段的文本信息 。客户端请求浏览器,如果服务器需要记录该状态,就使用 response 向客户端浏览器颁发一个 Cookie 。客户端浏览器会把 Cookie 保存起来 。当浏览器再请求该网站时,浏览器把请求的网址连同该 Cookie 一同提交给服务器 。服务器检查该 Cookie,以此来辨认用户状态 。服务器还可以根据需要修改 Cookie 的内容 。

很多网站都会使用 Cookie 。例如,Google 会向客户端颁发 Cookie,Baidu 也会向客户端 Cookie,而不会携带 Baidu 的 Cookie 。Google 也只能操作 Google 的 Cookie,而不能操作 Baidu 的 Cookie 。

Cookie 在客户端是由浏览器来管理的 。浏览器能够保证 Google 只会操作 Google 的 Cookie 而不会操作 Baidu 的 Cookie,从而保证用户的隐私安全 。浏览器判断一个网站能否操作另一个网站 Cookie 的依据是域名 。Google 与 Baidu 的Cookie 。

如果用户是在自己家的电脑上网,登录时就可以记住他的登录信息,下次访问时不需要再次登录,直接访问即可 。实现方法是把登录信息如账号、密码等保存在 Cookie 中,并控制 Cookie 的有效期,下次再访问时再验证 Cookie 中的登录信息即可 。

保存登录信息有多种方案 。最直接的是把用户名与密码都保持到 Cookie 中,下次访问时检查 Cookie 中的用户名与密码,与数据库比较 。这是一种比较危险的选择,一般不把密码等重要信息保存到 Cookie 中 。方案二是把密码加密后保存到 Cookie 中,下次访问时解密并与数据库比较 。这种方案略微安全一些 。如果不希望保存密码,还可以把登录的时间戳保存到 Cookie 与数据库中,到时只验证用户名与登录时间戳就可以了 。方案三只在登录时查询一次数据库,以后访问验证登录信息时不再查询数据库 。实现方式是把账号按照一定的规则加密后,连同账号一块保存到 Cookie 中 。下次访问时只需要判断账号的加密规则是否正确即可 。一和二两时种方案验证账号时都要查询数据库 。方案三把账号保存到名为 account 的 Cookie 中,把账号连同密钥用 MD5 算法加密后保存到名为 ssid 的 Cookie 中 。验证时验证 Cookie 中的账号与密钥加密后是否与 Cookie 中的 ssid 相等 。

该加密机制中最重要的部分为算法和密钥 。由于 MD5 算法的不可逆性 ,即使用户知道了账号与加密后的字符串 ,也不可能解密得到密钥 。因此,只要保管好密钥与算法 ,该机制就是安全的 。

由于网页是一种无状态的连接程序 ,因此无法得知用户的浏览状态 。在网上购物时 ,把很多商品加入了购物车 ,而在结账时网站却不知道你在购物车有哪些物品 。为了解决这个问题 ,服务器端就为特定用户创建了特定的 session ,用于标示并跟踪这个用户 ,这样才知道购物车里有哪些商品 。

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

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了 。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份 。Session相当于程序在服务器上建立一份客户档案,客户来访的时候只需要查询客户档案表就可以了 。

Session和Cookie的关系:

Cookie是一个实际存在的、具体的东西,http协议中定义在header中的字段。

Session是一个抽象概念,开发者为了实现中断和继续等操作,将client和server之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是Session的概念。即Session描述的是一种通讯会话机制,而cookie只是目前实现这种机制的主流方案里面的一个参与者,它一般是用于保存Session ID 。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值