Language agnostic 什么是会话?它们是如何工作的?

Language agnostic 什么是会话?它们是如何工作的?,language-agnostic,session,Language Agnostic,Session,我刚刚开始学习使用python开发web应用程序。我遇到了“cookies”和“sessions”这两个术语。我理解Cookie,因为它们在浏览器上的键值对中存储一些信息。但我对会话有点困惑,在会话中,我们也将数据存储在用户浏览器上的cookie中 例如,我使用username='rasmus'和password='default'登录。在这种情况下,数据将被发布到服务器,如果经过身份验证,该服务器应该检查并让我登录。但是,在整个过程中,服务器还会生成会话ID,该ID将存储在浏览器上的cooki

我刚刚开始学习使用python开发web应用程序。我遇到了“cookies”和“sessions”这两个术语。我理解Cookie,因为它们在浏览器上的键值对中存储一些信息。但我对会话有点困惑,在会话中,我们也将数据存储在用户浏览器上的cookie中

例如,我使用
username='rasmus'
password='default'
登录。在这种情况下,数据将被发布到服务器,如果经过身份验证,该服务器应该检查并让我登录。但是,在整个过程中,服务器还会生成会话ID,该ID将存储在浏览器上的cookie中。现在,服务器还将该会话ID存储在其文件系统或数据存储中

但是仅仅基于会话ID,在我随后遍历站点时,它如何知道我的用户名呢?它是否将数据作为dict存储在服务器上,其中密钥是会话ID和详细信息,如
用户名
电子邮件
等。这些值是什么


我在这里感到很困惑。需要帮助。

HTTP是无状态连接协议,即服务器无法区分不同用户的不同连接

因此,cookie出现了,一旦客户机第一次连接到服务器,服务器将生成一个新的会话id,该id稍后将作为cookie值发送给客户机。从现在起,这个会话id将标识该客户端连接,因为在每个HTTP请求中,它将在cookie中看到相应的会话id


现在,对于每个会话id,服务器保留一些数据结构,这使他能够存储特定于用户的数据,您可以抽象地调用该数据结构。

由于HTTP是无状态的,为了将请求与任何其他请求相关联,您需要一种在HTTP请求之间存储用户数据的方法

Cookie或URL参数(例如like)都是在2个或更多请求之间传输数据的合适方法。
但是,如果您不希望该数据在客户端可读/可编辑,则它们并不好

解决方案是存储数据服务器端,给它一个“id”,只让客户机知道(并在每次http请求时传回)该id。或者,您可以将客户机用作方便的远程存储,但需要加密数据并在服务器端保密

当然还有其他方面需要考虑,比如你不想让别人劫持别人的会议,你希望会议不会永远持续下去,而是期满,等等。 在您的特定示例中,用户id(可以是用户名或用户数据库中的另一个唯一id)在成功识别后存储在会话数据服务器端。然后,对于从客户端收到的每个HTTP请求,会话id(由客户端提供)将指向包含经过身份验证的用户id的正确会话数据(由服务器存储),这样您的代码就可以知道它正在与哪个用户通话。

“会话”是指用户浏览网站的时间。这意味着表示从他们第一次到达站点中的某个页面到他们停止使用站点之间的时间。在实践中,不可能知道用户何时完成了对站点的操作。在大多数服务器中,除非同一用户请求另一个页面,否则会有一个超时自动结束会话

用户第一次连接时,会创建某种会话ID(操作方式取决于web服务器软件和您在站点上使用的身份验证/登录类型)。 像cookies一样,这通常不会在URL中发送,因为这是一个安全问题。相反,它与一堆其他东西一起存储,这些东西统称为会话。会话变量类似于cookie——它们是与页面请求一起发送的名称-值对,并从服务器随页面一起返回——但它们的名称是在web标准中定义的

某些会话变量作为变量传递。它们在每个页面浏览的后台来回传递,所以它们不会出现在浏览器中,并告诉每个人一些可能是隐私的事情。其中包括用户代理或请求页面的浏览器类型、引用者或链接到所请求页面的页面等。一些web服务器软件添加自己的标题或传输特定于服务器软件的附加会话数据。但是标准的都有很好的文档记录

希望有帮助。

简单的类比解释 想象一下,你在银行里,试图从你的账户中取出一些钱。但是天很黑;银行一片漆黑:没有灯光,你看不到你的手在脸前。你周围还有20个人。它们看起来都一样。每个人都有相同的声音。每个人都是潜在的坏人。换句话说,HTTP是无状态的

这家银行是一家有趣的银行——为了便于讨论,以下是银行的运作方式:

  • 你排队(或在线)与出纳员交谈:你提出提款请求,然后
  • 你得在沙发上等一会儿,20分钟后再等
  • 你必须去柜员那里取钱
  • 但是出纳员怎么把你和其他人区别开来呢? 记住,出纳员看不见你,也认不出你,因为灯都灭了。如果你的出纳员把你的10000美元取款给了其他人怎么办?错的人?!出纳员能认出你是提款人是绝对重要的,这样你就能得到你要的钱(或资源)

    解决方案:

    当你第一次出现在出纳员面前时,他或她会秘密告诉你一些事情:

    “当你跟我说话的时候,”出纳员说,“你应该先确认自己是GNASHEU329——这样我就知道是你了。”

    没有人知道这个秘密