• http 无状态性


    定义:

    协议对于事务处理没有记忆性,例如客户端发http请求给服务端后再发一次,服务器不知道第二个请求是刚才那个用户发的。

    因为HTTP的无状态,因而会产生对应的问题

    设想一个场景,用户小明在网站上购物,登录确认一下小明的身份跳转进购物网页,但是下一秒服务器就不认识小明了,购物或者添加购物车的过程中 一次次验证发送请求的是谁?

    这样很不人性化。用Cookie和Session技术解决这样的问题。

    Cookie技术:

    Cookie实际上是一小段的文本信息,放在http协议header的字段中。客户请求服务器时,服务器回应的过程中带着一个Cookie信息,下一次客户再请求信息把这个Cookie信息带上,服务器就知道是刚才那货又发来请求了。服务器还可以根据需要修改Cookie的内容。

    注意:

    Cookie技术不可跨域名,例如浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。

    保存登录信息的方式有很多种:

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

    Session技术:

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

    客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了;

    如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份;

    Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了;

    Session和Cookie的关系:

    • cookie是一个实际存在的、具体的东西,http 协议中定义在 header 中的字段。
    • session是一个抽象概念、开发者为了实现中断和继续等操作,将client和server之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。
    • 即session描述的是一种通讯会话机制,而cookie只是目前实现这种机制的主流方案里面的一个参与者,它一般是用于保存session ID。
  • 相关阅读:
    模块化 —— CommonJS、AMD、UMD、ESM(下)
    模块化 —— CommonJS、AMD、UMD、ESM(上)
    移动端事件(四)—— 函数防抖和函数节流
    移动端事件(三)—— 横竖屏与加速度、移动的方块
    一起来学JavaScript吧(JS兔子领进门)
    【资源】一些常用的前端资源网站(不定期更新)
    redis
    django-高并发解决方案--负载均衡
    输入某年某月某日,判断这一天是这一年的第几天
    一篇英文文档中找出频数最多的10个单词
  • 原文地址:https://www.cnblogs.com/fangdada/p/14916914.html
Copyright © 2020-2023  润新知