Ras*_*mus 301 language-agnostic session
我刚刚开始使用python开始学习Web应用程序开发.我遇到了"cookies"和"会话"这两个词.我理解cookie,因为它们将一些信息存储在浏览器的键值对中.但是我对会话有点困惑,在会话中我们也将数据存储在用户浏览器的cookie中.
例如 - 我使用username='rasmus'和登录password='default'.在这种情况下,数据将被发布到服务器,如果经过身份验证,该服务器应该检查并登录.但是,在整个过程中,服务器还会生成会话ID,该ID将存储在浏览器的cookie中.现在,服务器还将此会话ID存储在其文件系统或数据存储中.
但基于会话ID,如何在我后续遍历网站时知道我的用户名?它是否将数据作为dict存储在服务器上,其中键是会话ID username,email等等细节是值?
我在这里很困惑.需要帮忙.
Luk*_*404 368
由于HTTP是无状态的,因此为了将请求与任何其他请求相关联,您需要一种在HTTP请求之间存储用户数据的方法.
Cookie或网址参数(例如http://example.com/myPage?asd=lol&boo=no)都是在两个或更多请求之间传输数据的合适方式.但是,如果您不希望数据在客户端可读/可编辑,则它们并不好.
解决方案是存储该数据服务器端,给它一个"id",并让客户端只知道(并在每个http请求时传回)该id.你去,会议实施.或者您可以将客户端用作方便的远程存储,但您可以加密数据并保留服务器端的秘密.
当然还有其他方面需要考虑,比如你不希望别人劫持其他人的会话,你希望会话不会永远持续但会过期,等等.
在您的特定示例中,用户标识(可以是用户数据库中的用户名或其他唯一标识)在成功标识后存储在服务器端的会话数据中.然后,对于从客户端获得的每个HTTP请求,会话ID(由客户端提供)将指向包含经过身份验证的用户ID的正确会话数据(由服务器存储) - 这样您的代码将知道用户是什么在说话.
BKS*_*eon 76
想象一下,你在银行里,试图从你的帐户中获取一些钱.但它是黑暗的; 银行是黑色的:没有光,你看不到你的手在你面前.你被另外20个人包围.它们看起来都一样.每个人都有同样的声音.每个人都是潜在的坏人.换句话说,HTTP是无状态的.
这家银行是一个有趣的银行类型 - 为了争论这里的事情是如何运作的:
请记住,出纳员无法看到或容易认出你,因为灯光全部都在外面.如果您的出纳员向其他人提供10,000美元的提款 - 错误的人怎么办?出纳员可以将您识别为退出的人,这样您就可以获得所要求的资金(或资源),这一点至关重要.
解:
当您第一次看到出纳员时,他或她会秘密告诉您一些事情:
"当你和我说话的时候,"出纳员说,"你应该首先把自己称为GNASHEU329 - 我知道这就是你".
没人知道秘密密码.
所以我决定去休息20分钟然后我去柜员说"我想收取我的提款"
出纳员问我:"你是谁?!"
"这是我,乔治班克斯先生!"
"证明给我看!"
然后我告诉他们我的密码:GNASHEU329
"当然是班克斯先生!"
这基本上就是会话的工作方式.它允许在数百万人的海洋中唯一地识别出一个人.每次与柜员打交道时都需要表明身份.
如果您有任何疑问或不清楚 - 请发表评论,我会尽力为您解决.
Tim*_*rke 36
"会话"是用于指代用户浏览网站的时间的术语.它的意思是表示他们第一次到达网站页面之间的时间,直到他们停止使用网站为止.实际上,不可能知道用户何时完成了该站点.在大多数服务器中,超时会自动结束会话,除非同一用户请求另一个页面.
用户第一次连接某种会话ID(如何完成取决于Web服务器软件以及您在网站上使用的身份验证/登录类型).像cookie一样,这通常不再在URL中发送,因为它是一个安全问题.相反,它与一堆其他东西一起存储,这些东西统称为会话.会话变量就像cookie一样 - 它们是与页面请求一起发送的名称 - 值对,并随服务器页面一起返回 - 但它们的名称是在Web标准中定义的.
一些会话变量作为HTTP标头传递.它们在每个页面浏览的幕后来回传递,因此它们不会显示在浏览器中并告诉每个人可能是私密的.其中包括USER_AGENT,或请求页面的浏览器类型,REFERRER或链接到所请求页面的页面等.某些Web服务器软件添加自己的标题或传输特定于服务器软件的其他会话数据.但标准的文件很好.
希望有所帮助.
Art*_*ger 19
HTTP是无状态连接协议,即服务器无法区分不同用户的不同连接.
因此来自cookie,一旦客户端第一次连接到服务器,服务器就会生成一个新的会话ID,稍后将以cookie值的形式发送给客户端.从现在开始,此会话ID将标识该客户端连接,因为在每个HTTP请求中,它将在cookie中看到相应的会话ID.
现在对于每个会话id,服务器保留一些数据结构,这使他能够存储特定于用户的数据,这个数据结构可以抽象地调用会话.
Luv*_*eet 10
把 HTTP 想象成一个人(A),他有短期记忆丢失,一旦那个人离开视线就会忘记每个人。
现在,为了记住不同的人,A 给那个人拍了一张照片并保存下来。每个人的照片都有一个 ID 号。当那个人再次出现时,那个人告诉 A 自己的身份证号码,A 通过身份证号码找到他们的照片。瞧!!,A 知道那个人是谁。
HTTP 也是如此。它正在遭受短期记忆丧失。它使用 Sessions 记录您在使用网站时所做的一切,然后当您再次访问时,它会在 Cookies 的帮助下识别您(Cookie 就像一个令牌)。这里的图片是Session,ID是这里的Cookie。
ime*_*emi 10
Session是广泛的技术术语,可用于指使用内存缓存存储在服务器端或使用cookie,local storage或存储在客户端的状态session storage。
浏览器或服务器上没有任何特定的东西称为会话。会话是一种表示用户在网络上会话的数据。该数据可以存储在服务器或客户端上。
而它如何存储和共享则是另一个话题。但简单来说,当用户登录时,服务器会创建会话数据并生成会话 ID。会话 ID 在自定义标头或标头中发送回用户set-cookie,标头负责自动将其存储在用户的浏览器上。然后,当用户下次再次访问时,会话 ID 会随请求一起发送,服务器会检查该 ID 是否存在现有会话并进行相应处理。
您可以在会话中存储您想要的任何内容,但主要目的是记住之前访问过您网站的用户(浏览器),无论是有关登录、购物车还是其他活动。
这就是为什么保护会话 ID 不被黑客拦截也很重要,黑客会使用它来将自己标识为另一个用户。
通过阅读 Cookie,您将了解会话的概念:( https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies )
摘自MDN:
Cookies are mainly used for three purposes:
Session management
Logins, shopping carts, game scores, or anything else the server should remember
Personalization
User preferences, themes, and other settings
Tracking
Recording and analyzing user behavior
Run Code Online (Sandbox Code Playgroud)