我正在ASP.NET MVC 3中构建Web门户,它使用远程Web服务作为与数据库通信的唯一方式。 Web服务要求始终在请求标头中传递用户名/密码,否则拒绝该呼叫。
我已覆盖ASP.NET成员资格,以便我的ValidateUser方法将用户名/密码发送到Web服务登录方法,如果身份验证成功则返回true / false。它与使用MVC 3 Empty网络模板提供的AcountController相当不错。由于我必须在每个Web服务调用上传递用户名/密码,因此我将它们保存在Session中。
我的问题是:
如果我关闭浏览器并重新打开它...我仍然登录到网站,但我的会话变量已过期,因此我的Web服务请求都没有被接受,即使我仍然使用凭据登录。
我正在寻找如何将用户登录状态与会话状态同步的好建议。要么保持它们是持久的,直到使用注销,或者让它们都在浏览器关闭时处理。
感谢所有建议:)
答案 0 :(得分:1)
当用户使用您的AccountController登录时,请尝试设置auth cookie,如下所示:
FormsAuthentication.SetAuthCookie(model.UserName, false);
这应该告诉ASP.NET在浏览器窗口关闭时删除cookie。然后,当用户打开一个新的浏览器时,会话和auth cookie都应该被销毁。
答案 1 :(得分:0)
会话是客户端的cookie。表单身份验证(使用您的成员资格提供程序)也使用cookie。
他们是不同的。
您的身份验证票证或Cookie是否持久存在? This MS KB会比我在这里更详细地解释事情和场景......
H个。