【问题标题】:How actually Session works in MVC?Session 在 MVC 中实际上是如何工作的?
【发布时间】:2015-01-30 10:22:01
【问题描述】:

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

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

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

现在我有以下问题:

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

【问题讨论】:

  • 我会在找到更多时间时尝试回答您的具体问题,但我认为此 URL 将帮助您消除一些疑问。 gregorybeamer.wordpress.com/2012/11/04/…
  • 好的,谢谢我会通过这个网址
  • Session 永远不会由 ViewState“维护”,它们是完全独立的机制。 ViewState 存储在页面中的隐藏字段中,会话数据永远不会发送到浏览器。

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


【解决方案1】:

首先我建议阅读this Wikipedia article 关于 HTTP 会话的信息。你的问题的答案:

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

【讨论】:

  • 感谢您的回复。我明白你想说什么。请检查以下 cmets- 所以这意味着我不需要做任何额外的事情来维护用户会话。我将在 HttpContext 会话中添加 userName 及其 sessionId。服务器将获取 cookie 值并获取其相关的会话以及用户名和用户信息。这样对吗?此外,我们从不同的机器上为相同的浏览器获得相同的 sessionId。但是您说会话劫持只会发生这种情况。那么这是怎么回事呢?
  • 是的,ASP MVC 开箱即用地处理会话,除非您更改配置中的某些内容。如果要对用户进行身份验证,请查看表单身份验证:msdn.microsoft.com/en-us/library/ff398049(v=vs.98).aspx 相同的SessionId 到底是什么意思?这意味着 cookie 中的值在两台机器上是相同的。您能否通过在机器 1 上的会话中放入一些内容并在机器 2 上读取它来验证您的应用程序中的这种行为?
  • 感谢您的回复。好的,我会这样做的。 SessionId 表示从浏览器接收到的 sessionId
  • 只是为了确认一下,名为ASP.NET_SessionId的cookie中的值在两台机器上是否相同?也许这篇文章有帮助:support.microsoft.com/kb/899918
  • 我可以在 javascript 或 jquery 中获取从服务器接收的 SessionId 进行检查吗?在我的应用程序中,“document.cookie;”这个返回空。由于这里的 cookie 是空的,我也没有在 url 中获取 sessionId,那么它是如何工作的?
猜你喜欢
  • 2010-12-07
  • 1970-01-01
  • 2021-01-21
  • 2011-09-27
  • 2021-12-16
  • 2013-03-14
  • 2021-03-23
  • 2011-02-11
  • 2017-07-31
相关资源
最近更新 更多