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

时间:2014-12-02 08:26:27

标签: asp.net asp.net-mvc asp.net-mvc-4 session session-state

我对MVC4中的会话管理感到有点困惑。

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

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

现在我有以下问题:

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

1 个答案:

答案 0 :(得分:5)

首先,我建议您阅读有关HTTP会话的this Wikipedia article。你问题的答案:

  1. 每次请求时,客户端都会在cookie中发送SessionId 或查询字符串。
  2. 默认情况下不可能这样做。但可以通过session hijacking完成。
  3. 服务器读取由问题1的客户端发送的SessionId。服务器维护例如一个键值数据对象,以便它可以加载给定SessionId的正确数据。
  4. ASP MVC不使用视图状态,因为它与ASP.NET完全不同。有关详细信息,请参阅this question