面对MVC应用程序中的会话问题

时间:2011-10-01 06:54:28

标签: c# asp.net asp.net-mvc asp.net-mvc-3 session

我正在使用Asp.Net会员资格,当用户输入正确的用户名和密码时,我使用以下方式签名:

FormsAuthentication.SetAuthCookie(String, Boolean)

如果我创建了一个持久性cookie,那么我认为我的会员资格仍然可以工作,但我的会话数据将为空。

这真的是在我的应用程序中引入并引入了很多错误。我怎么处理这个?

我应该处理global.asax的Application_AuthenticateRequest并检查我在会话中存储的userId是否为空且Membership.GetUser()不为空,那么我应该在Session中再次存储ProviderUserKey(Guid)。

这是一种合理的方法还是有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:2)

您必须在web.config文件中配置会话和authcookie的生命周期。参见:

<forms timeout="5" />

<sessionState timeout="5" />
  

表单用于身份验证,超时表单将注销   用户。您可以通过设置SlidingExpiration属性来“阻止”超时   为'true',它将更新用户活动的表单票据(阅读   如果需要,请求asp)。这将使用户保持登录状态   在您的网站上“活跃”。

  

当会话超时时,您将丢失在Session对象中找到的数据。

您的问题可能出在这个问题上。您的auth-cookie已存在,但会话已超时。用户已登录,但会话变量已被破坏!在您的应用中检查此配置。


See this Q also

答案 1 :(得分:1)

会议和authcookies是不同的。 authcookies生命周期可以在forms timeout="5" config-section中设置,会话生命周期应该在sessionState timeout="5" config-section中设置。 auth-cookie可能仍然存在,但会话到期。检查一下。

答案 2 :(得分:0)

我认为,你需要使用session而不是cookie。 根据我的说法,在会话或任何地方保存ProviderUserKey应该是不可取的。 使用global.asax(Application_AuthenticateRequest)进行检查身份验证,并根据该ID从DB获取ProviderUserKey。

希望我的评论对你有用。