Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller MVC用户登录和会话_Model View Controller_Session_Cookies - Fatal编程技术网

Model view controller MVC用户登录和会话

Model view controller MVC用户登录和会话,model-view-controller,session,cookies,Model View Controller,Session,Cookies,我的web应用程序要求用户登录才能查看其中的任何网页 当用户登录I store时,在会话中输入用户名和密码,以便以后检索。这一切都很好,但是,如果我重新运行我的项目,它似乎跳过了过去的身份验证,直接转到控制器执行该操作 我认为正在发生的是FormsAuthentication.SetAuthCookie(用户名,createPersistentCookie)记住用户已登录,但我的会话未更新 如何捕获此场景并相应地更新会话?如果我正确理解此问题,您可以使用基本操作类so并将身份验证机制移动到那里。

我的web应用程序要求用户登录才能查看其中的任何网页

当用户登录I store时,在会话中输入用户名和密码,以便以后检索。这一切都很好,但是,如果我重新运行我的项目,它似乎跳过了过去的身份验证,直接转到控制器执行该操作

我认为正在发生的是
FormsAuthentication.SetAuthCookie(用户名,createPersistentCookie)记住用户已登录,但我的会话未更新


如何捕获此场景并相应地更新会话?

如果我正确理解此问题,您可以使用基本操作类so并将身份验证机制移动到那里。因此,对于每个请求,都将调用此基本操作,这样您就可以确保不会跳过身份验证机制。

有很多方法

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

虽然将密码置于会话状态不是首选的方式,但我相信您有理由这样做

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


顺便问一下,您能否详细说明为什么需要在会话状态下存储用户密码?

我使用用户名/密码消息加密与WCF服务通信,这就是为什么我需要知道用户名和密码;每次调用WCF服务时都会使用它-如果有更好的方法,请让我知道一种方法是在WCF中维护会话,但不建议这样做:)。虽然我曾经在同一个场景中,业务部门要求我们不要在会话状态下保存密码,我们为所有人创建了一个“通用”密码,并在我们知道用户在web应用程序中经过身份验证后将其传递。希望这有意义!感谢Imran-目前我们的WCF服务也是我们的会员和角色提供者,因此所有身份验证都是通过它完成的,我相信您仍然可以这样做。仅为登录WCF方法提供密码,对于其余通信,只需使用通用密码。不过,如果您没有被迫不使用会话状态来存储密码,那么可能还没那么糟糕。