Session实际上如何在MVC中运行?

Ash*_*hok 5 asp.net asp.net-mvc session session-state asp.net-mvc-4

我对MVC4中的会话管理有点困惑.

可以说,我输入了用户名和密码,然后单击了"登录"按钮.然后在服务器端,我从HttpContext.Current.Session获得了SessionId.然后我正在验证针对数据库的用户凭据.如果用户有效,则在Session中添加SessionId,userName和uiserId.

可以说,下次请求来自同一台机器和同一个浏览器时,我得到了相同的SessionId,然后允许该用户访问其他信息.

现在我有以下问题:

  1. 服务器如何知道该请求来自同一台浏览器和同一台机器?
  2. 我发现,SessionId对于不同的浏览器是不同的,但对于不同机器上的同一浏览器是相同的,所以如果我从machine1登录并使用谷歌浏览器,那么是否可以对不同的浏览器使用相同的会话?(意味着会话将是可用于具有相同浏览器的不同机器.是否可能?)
  3. 服务器如何理解该请求是针对同一用户,谁登录?
  4. 在asp.net会话中是由viewState维护的,但是在MVC中没有使用视图状态,那么在MVC中使用了什么?

Mar*_*ijn 5

首先,我建议阅读这篇关于HTTP会话的维基百科文章.你问题的答案:

  1. 对于每个请求,客户端都会SessionId在cookie或查询字符串中发送它.
  2. 默认情况下这不可能.但它可以通过会话劫持来完成.
  3. 服务器读取SessionId由问题1的客户端发送的服务器.服务器维护例如密钥值数据对象,以便它可以加载给定的正确数据SessionId.
  4. ASP MVC不使用视图状态,因为它与ASP.NET完全不同.有关更多信息,请参阅此问题.