• 理解cookie和session机制


    cookie

    在网站中,http请求是无状态的。也就是说即使第一次和服务器连接并且登录成功后,第二次请求服务器的时候服务器仍然不能知道当前是哪个用户的请求。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存到本地,当该用户第二次请求服务器响应的时候,就会自动的把上次请求存储的cookie数据携带给服务器,服务器通过浏览器携带的数据就能判断是哪个用户请求数据了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4kb,很多浏览器都限制一个站点最多保存20个cookie,因此使用cookie只能存储一些小量的数据。

    Cookie的不可跨域名性

    很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?

    答案是否定的。Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

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

    需要注意的是,虽然网站images.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie。

    注意:用户登录网站www.google.com之后会发现访问images.google.com时登录信息仍然有效,而普通的Cookie是做不到的。这是因为Google做了特殊处理。

    session

    session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器中的,session是一个服务器存储授权信息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现。虽然实现不一样,但是他们的目的都是为了服务器能够方便的存储数据。session的出现,解决了cookie存储数据不安全的问题。

    cookie和session的结合使用:

    web开发中,cookie和session的使用已经出现了一些非常成熟的方案。一般有两种存储方式:

    • 存储在服务器端:通过cookie存储一个sessionid,然后具体的数据保存在session中。服务器会在cookie中保存一个sessionid,下次再请求的时候会把sessionid携带上来,如果该用户已经登录,服务器根据sessionid在session库中获取用户的session数据,然后服务器就知道该用户是谁以及之前保存的一些状态信息了。这就是server side session。(Django默认把session信息存储到数据库中,当然也可以存储到其他地方,比如缓存中,文件系统中等。)存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器端也有一定的弊端,也就是会占用服务器的资源,但现在服务器已经发展至今,存储一些session信息还是绰绰有余的。
    • 将session数据加密然后存储在cookie中。这就是client side session。(Flask框架默认采用的就是这种方式,但是也可以替换成其他形式)

    参考:
    理解Cookie和Session机制 https://www.cnblogs.com/andy-zhou/p/5360107.html#_caption_1
    cookie 和session 的区别详解 https://www.cnblogs.com/shiyangxt/articles/1305506.html

  • 相关阅读:
    2020/7/18 JDBC
    2020.8.1
    2020.7.31
    二元泰勒公式
    一元泰勒公式
    极值
    介值定理
    积分上限函数
    积分中值定理
    狄利克雷(Dirichlet)函数
  • 原文地址:https://www.cnblogs.com/onefine/p/10499344.html
Copyright © 2020-2023  润新知