0

我在 ASP.NET MVC 3 中构建 Web 门户,它使用远程 Web 服务作为与数据库通信的唯一方式。Web 服务要求始终在请求标头中传递用户名/密码,否则它会拒绝调用。

我已经重写了 ASP.NET 成员资格,以便我的 ValidateUser 方法将用户名/密码发送到 Web 服务登录方法,如果身份验证成功则返回 true/false。它与 MVC 3 Empty Internet 模板提供的 AcountController 配合使用非常好。由于我必须在每个 Web 服务调用中传递用户名/密码,因此我将它们保存在 Session 中。

我的问题是:

如果我关闭浏览器并重新打开它...我仍然登录到网站,但我的 Session 变量已过期,因此我对 Web 服务的请求都没有被接受,即使我仍然使用凭据登录。

我正在寻找如何将用户登录状态与会话状态同步的好建议。要么让它们都保持不变,直到使用注销,要么让它们都在浏览器关闭时处理。

感谢所有建议:)

4

2 回答 2

1

当用户使用您的 AccountController 登录时,尝试像这样设置 auth cookie:

FormsAuthentication.SetAuthCookie(model.UserName, false);

This should tell ASP.NET to delete the cookie when the browser window is closed. Then, when user opens up a new browser, both the session and the auth cookie should both be destroyed.

于 2012-05-31T20:06:09.347 回答
0

会话是客户端的 cookie。表单身份验证(使用您的会员提供商)也使用 cookie。

它们是不同的。

您的身份验证票或 cookie 是否持久?这个 MS KB将比我在这里更详细地解释事物和场景......

嗯。

于 2012-05-31T18:17:55.757 回答