2011-01-10 102 views
1

我的web应用程序要求用户登录才能查看其上的任何网页。MVC用户登录和会话

当用户登录时,我在会话中存储他们的用户名和密码以供稍后检索。这一切都很好,但是,如果我重新运行我的项目,它似乎跳过了身份验证并直接进入该操作的控制器。

我假设发生的是FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);记住用户已登录但我的会话未更新。

如何捕获这种情况并相应地更新我的会话?

回答

2

有很多方法可以解决这个问题。

首先,您可以选择,而不是坚持cookie。但是,如果会话尚未过期并且您重新编译了项目,这仍然会导致异常。重新编译项目会破坏会话状态。

尽管将密码置于会话状态并不是实现它的首选方式,但我相信您会有这样做的正当理由。

但是,如果要这样做,则可以覆盖Global.asax中的Application_AuthenticateRequest事件。每次请求进入时都会触发此事件,您可以检查请求是否已通过身份验证(使用HttpContext.Current.User.Identity.IsAuthenticated)并重新填充会话状态。

顺便说一句,你能说明为什么你需要在会​​话状态下存储用户密码吗?

+0

我使用用户名/密码信息加密与WCF服务进行通信,这就是为什么我需要知道用户名和密码;它在每次调用WCF服务时都使用 - 如果有更好的方法可以做到这一点,请让我知道 – Chris 2011-01-10 14:36:32

0

如果我正确地理解了这个问题,你可以让基类动作类如此,并在那里移动身份验证机制。因此,对于每个请求,这个基础将被调用,因此你可以确保身份验证机制不会被跳过。