什么是会议? 他们如何工作?

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

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

但基于会话ID,在随后遍历整个站点的过程中,如何能够知道我的用户名? 它是否存储在服务器上的数据作为一个字典的关键将是一个会话ID和详细信息,如usernameemail等是值?

我在这里很困惑。 需要帮忙。

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

Cookie或URL参数(例如http://example.com/myPage?asd=lol&boo=no )都是在两个或多个请求之间传输数据的合适方法。 但是,如果您不希望该数据在客户端可读/可编辑,则它们并不好。

解决scheme是存储数据服务器端,给它一个“ID”,让客户端只知道(并在每个HTTP请求传回)该ID。 你去,会议实施。 或者你可以使用客户端作为一个方便的远程存储,但你会encryption数据,并保持秘密的服务器端。

当然,还有其他的方面需要考虑,比如你不想让人们劫持别人的会话,你想让会议不会永远持续下去,而是会过期,等等。

在您的具体示例中,成功标识后,用户标识(可能是用户名或用户数据库中的另一个唯一标识)将存储在会话数据(服务器端)中。 然后,对于从客户端获得的每个HTTP请求,会话ID(由客户端提供)将指向包含经过身份validation的用户ID的正确会话数据(由服务器存储) – 这样您的代码将知道用户正在交谈。

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

用户第一次连接某种types的会话ID(如何完成取决于Web服务器软件以及您在网站上使用的身份validation/logintypes)。 像Cookie一样,这通常不会再发送到URL中,因为这是一个安全问题。 相反,它会与其他一些内容一起存储,也称为会话。 会话variables就像cookies–它们是一个名称 – 值对,随同一个页面请求一起发送,并从服务器返回页面 – 但是它们的名字是在一个web标准中定义的。

一些会话variables作为HTTP头传递。 它们在每个页面浏览的幕后来回传递,所以它们不会在浏览器中显示,并告诉每个人可能是私有的。 其中包括USER_AGENT,或请求页面的浏览器types,REFERRER或链接到所请求页面的页面等。一些Web服务器软件添加它们自己的标题或传输特定于服务器软件的附加会话数据。 但标准的很好的logging。

希望有所帮助。

比喻解释

想象一下,你在银行,试图从你的帐户中获得一些钱。 但银行是黑色的 – 没有光,你看不到你的手在你面前 – 而你被另外20个人包围。 他们都看起来一样。 每个人都有同样的声音。 换句话说,HTTP是无状态的。

这家银行是一个有趣的银行types – 为了争辩这里的事情是如何工作的:

  1. 你排队等候,然后你和柜员交谈 – 你要求提款,然后
  2. 你必须在沙发上等一下,20分钟后
  3. 你必须去实际上从柜员那里收钱。

但是,出纳员怎样才能告诉你和其他人呢? 出纳员看不到或很难认出你,记住,因为灯都熄灭了。 如果您的出纳员将您的$ 10,000提款给别人 – 如果是错误的人呢? 你会很生气,我猜?

解:

当你第一次看到出纳员时,他或她会秘密地告诉你:“当你和我说话的时候,”出纳员说,“你应该首先把你自己认定为GNASHEU329–这样我就知道你是你了”。

没有人知道密码。

所以我决定去20分钟,然后我去看柜员说:“我想收集我的提款”

出纳员问我:“你是谁!”

“乔治class克斯先生,是我!”

“certificate给我看!”

然后我告诉他们我的密码:GNASHEU329

“当然是class克斯先生!

这基本上是一个会议如何工作。 它使人们能够在数百万人的海洋中独一无二地被识别出来。 每次与出纳员打交道时都需要明确自己的身份。

希望对你有意义。 如果您有任何问题或不清楚,请发表评论,我会尽力为您解决。

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

因此,一旦客户端首次连接到服务器,服务器将生成一个新的会话ID,稍后将作为cookie值发送到客户端。 从现在开始,这个会话ID将识别客户端连接,因为在每个HTTP请求中,它将在cookie内部看到适当的会话ID。

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

把HTTP看作是一个人(A),他有短暂的内存丢失,并且一旦该人离开视线,就忘记每个人。

现在,为了记住不同的人,A把这个人的照片留下来,并保存下来。 每个人的照片都有一个ID号码。 当这个人再次进入视线时,那个人把它的ID号码告诉A,A通过ID号find他们的照片。 瞧,A知道谁是那个人。

与HTTP一样。 它正在遭受短暂的内存损失。 它使用会话来logging您在使用网站时所做的一切,然后,当您再次访问时,它会在Cookie的帮助下识别您(Cookie就像一个令牌一样)。 图片是这里的Session,ID是这里的Cookie。