会话使用cookie吗?

11

这是一个一个月前的面试问题...

会话使用cookie吗?如果是这样,它们如何使用?

假设有Session["UserId"]=1,那么这个会话变量在内部如何使用cookie?如果是这样的话,那么cookie的名称将是什么,它的值是什么....

4个回答

13

虽然数据本身存储在服务器上(或者在SQL中配置),但需要一种方法将会话数据与特定用户关联起来。

默认情况下,这是通过cookie完成的,但是可以配置为无cookie方式,此时唯一的ID存储在URL中。

根据微软的说法:

ASP通过为会话开始时分配给用户的唯一密钥来维护会话状态。该密钥存储在HTTP cookie中,在每个请求上客户端向服务器发送该cookie。服务器可以从cookie读取密钥并重新生成服务器会话状态。

http://msdn.microsoft.com/en-us/library/ms972429.aspx


该文章提到了几乎所有的细节。会话 ID 必须在浏览器和服务器之间传递,这样 IIS/ASP.NET 才能知道哪个会话对象需要用于某个请求。 - Lex Li
请查看这个链接 - Jibin

3
每个会话都有一个SessionID。Session ID是服务器在用户访问(会话)期间为特定用户分配的唯一编号。默认情况下,Session ID附加到一个cookie上,并且这个cookie将在客户端和服务器之间的请求/响应中共享。服务器将根据从cookie中检索出来的session id来识别会话。
如果您的浏览器不支持cookie或已禁用cookie,则会使用无cookie方式。由于它是无cookie方式,因此asp.net无法创建cookie来保存session id。相反,session id将通过查询字符串传递...

0

是的,会话管理是使用一种会话ID即cookie来完成的。在浏览器中维护的cookie有助于后端识别用户。

如果您从同一台计算机的两个浏览器访问应用程序,则将维护两个cookie,其中每个浏览器都是Asp.Net后端应用程序的单独用户。


-9

不是的,存储在服务器的某个临时文件夹中。 会话是在服务器端处理的,而Cookie则是在客户端处理的。


1
Cookies是将用户的会话ID与服务器上的会话数据绑定的默认方法。 - Michael Shimmins
在 PHP 中,会话存储在服务器上。我没有意识到这是 ASP。我的错。 - sdot257
2
你是对的,实际变量存储在服务器上(尽管可以提供不同的会话状态提供程序),但正如Michael Shimmins指出的那样,默认情况下会话令牌存储在cookie中。 - Roman
如果这在一个cookie里面,那就很糟糕了,你不能操纵这个cookie吗? - sdot257
理论上,是的,你可以更改你的会话令牌为其他内容,如果你正确猜测了另一个会话令牌,你就可以劫持那个人的会话。但是,如果你的会话令牌是相当随机生成的,将你的令牌更改为某个随机令牌只意味着你的会话在下一次服务器请求时无法正确检索。 - Roman
2
这是我在许多(我的同行)PHP开发人员中看到的一个巨大误解。PHP会话ID也可以存储在客户端的cookie中。除了不太安全的URL令牌方法之外,PHP还能以何种方式识别会话ID呢?好好想一想。 - Decent Dabbler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接