1

我什至不明白用户会话信息是如何在常规 HTTP/S GET 调用中保持不变的,我指的是细节,比如服务器/客户端交换中的逐行代码和数据。我基本上知道它是服务器上的一个会话对象,其中包含您需要的内容,以及包含在“cookie”WTHTI 中的该对象的 ID。这变得不透明(对Javascript)与服务器来回传递。该死的那个碰不得的饼干。

我想在 python/AppEngine 中实现会话 CRUD 数据库端点。进行会话持久性的最佳方法是什么?(没有框架、插件或现成的解决方案,我想了解)。我什至不知道这到底是如何在任何应用程序中完成的,但它是如此普遍。

我猜想每个 API 调用都会发送一个令牌,但不是那么混乱,只是在客户端的 Javascript/DOM 中有一个令牌?

饼干呢,饼干到底是怎么起作用的?这对我来说是一个盲点,而且非常关键。我不知道为什么它不透明且易于实施。

如果我们所做的只是将一个 id 来回传输并转发给 Ident 用户,并调用用户的会话对象,那么 cookie 和(不可食用的)令牌之间有什么区别?

是否完全有可能只进行用户身份验证、转换到会话、只使用令牌,还是必须使用 cookie?

我正在实现我自己的自定义身份验证(在 webapp2_extras 的背面),它将使用安全的 url 和所有常用的 saltyhashed 密码预防措施。但是我所有的 AJAX 机器的“令牌”和“cookie”会话部分仍然让我大吃一惊。

4

1 回答 1

3

饼干:

  1. Cookie 由浏览器内部处理,而不是由 Javascript 或 DOM 处理。
  2. Cookie 非常简单:只是一个名称:值对作为 HTTP 标头中的字符串发送
  3. 操作原理非常简单:服务器向浏览器发送 cookie,之后浏览器将 cookie 与每个请求一起发送到该服务器(这取决于 cookie 类型及其属性)
  4. 有几种类型的 cookie,但会话 cookie 是会话绑定的:浏览器将它们保存在内存中并发送它们,直到用户关闭浏览器应用程序。

在此处阅读更多信息:http ://en.wikipedia.org/wiki/HTTP_cookie

会话是来自同一用户的一系列 http 请求。它们通常是使用 cookie 构建的(还有其他技术),因此会话依赖于 cookie(但 cookie 不依赖于会话)。

Server sessions are an internal persistent storage bound to certain cookie, for example GAE on production uses cookie with name ACSID to track it's sessions. So when servers does not get a session cookie it assumes this is a new session and creates a new session cookie and sends it to client and creates the object storage tied to that session. Afterwards whenever server gets a session cookie it loads object storage bound to that cookie.

Note: cookies and sessions are not authentication: they can tell you that a series of requests come from the same user, but they don't tell you which user this is. This is the job of authentication, which you can roll your own (username-password based or similar) or you could use one of the available authentication protocols (OpenID, OAuth).

Qs:

  • Yes, you can your own session tracking with "non-edible" token, provided that you control both server and client. OTOH browsers are standards based and they use cookies out-of-the-box to provide sessions (but you can still roll your own in JS).
  • Best way to do session persistence: use an existing session library for python. You can still roll your own for learning purposes, but for production you should stick with one of the tested solutions.
于 2013-04-07T20:05:02.140 回答