HTTP会话总是需要Cookie吗?

时间:2010-03-02 22:34:18

标签: django http session

我猜是的,但我不确定。

经过身份验证的会话和匿名会话都将通过cookie引用存储的会话。

###########编辑:澄清

似乎会话需要某种方式来引用存储的会话数据 此引用可以存储在cookie中,也可以作为URL中的参数添加。

6 个答案:

答案 0 :(得分:4)

我知道这对你来说过于字面意义,但似乎有必要指出HTTP是无状态的,因此没有会​​话。为了维护状态,浏览器或服务器必须在请求之间保持状态信息。传统上,服务器维护状态,按照惯例,这称为会话,但它与HTTP无关,因为它是一种解决方法。此外,会话通常具有非常具体的内涵 - 即它是对站点的单独访问,当它不再被使用时会过期(某段时间不活动)。对于使用不同计算机或浏览器的同一用户,它也会有所不同。

为了实现服务器会话,服务器通常会在内存或数据库中留出一些信息以跟踪状态并使用一条识别信息将http请求与该状态相关联。这通常是一个标记。浏览器需要包括标识每个http请求的会话的信息。只要服务器和浏览器达成一致,无论发生这种情况都无关紧要。它通常是一个cookie或url参数作为后备,但只要你设置正确的代码,它也可以是url本身的一部分,POST主体的一部分,甚至是非标准的http头。

越来越受欢迎的替代方案是在浏览器中维护状态并使用纯粹的ajax调用服务器。在这种情况下,服务器不必维护任何会话概念,只需以完全用户无关的方式返回请求的数据。如果数据是私有的,则可能仍需要某些身份验证,但会话令牌不是,并且服务器上不保留任何状态。

答案 1 :(得分:1)

您可以将会话ID作为查询参数(www.blah.com/index.php?SESSIONID=fADSF124323)传递。但它必须在每一页上。 PHP has a option透明地启用此功能。这是一个巨大的混乱。这就是首选cookie的原因。

答案 2 :(得分:1)

不一定,某些网站使用表示会话的URL中存在的会话ID值,该值会附加到用户访问的所有链接上。

我们必须以这种方式使用它,因为移动浏览器通常不接受cookie,这是记住会话的唯一方法。

答案 3 :(得分:1)

此外还有HTTP-Authentication,今天不再使用,因为浏览器必须在每次请求时都将未经加密的用户名和密码发送到服务器。 HTTP-Auth只是将用户名和密码放入浏览器发送的标题中。

答案 4 :(得分:1)

您可以通过浏览器插件,字体等来识别人物。

https://panopticlick.eff.org/

答案 5 :(得分:1)

当您使用SSL / TLS时,您至少可以在理论上使用SSL 会话ID 来引用服务器上的某些状态。

相关问题