2

这个应用程序在一些用户仍在使用 IE7 的环境中运行,如果这有什么不同的话。我们偶尔会看到,在有人注销而其他人登录后,他们仍然会从前一个人那里得到残留物,这可能会显示该人的个人资料。任何建议将不胜感激。

我在我的 asp.net mvc 应用程序中使用以下作为注销方法

public ActionResult LogOff()
{

    System.Web.HttpContext.Current.Response.Cookies.Clear();
    FormsService.SignOut();
    Session["User"] = null;
    Session.Clear();
    Session.Abandon();
    Session.RemoveAll();

    return Redirect("/");
}

该应用程序使用保存在数据库中的会话,因为它在两个不同的 Web 服务器上运行。

这是来自 web.config 的一些设置

<sessionState sqlConnectionString="LiveDB" />
<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<membership>
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LiveDB" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="50" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="LiveDB" applicationName="/" />
  </providers>
</profile>
<roleManager enabled="true">
  <providers>
    <clear />
    <add connectionStringName="LiveDB" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>
4

2 回答 2

4

如果您使用 FormAuthentication 像这样登录 -

FormsAuthentication.SetAuthCookie("username", false);

那么注销应该是

FormsAuthentication.SignOut();

如果您仍然有问题,您可以像这样强制 cookie 过期。

于 2013-08-16T20:10:16.143 回答
0

MembershipSession供应商分开工作。两个成员可以使用一个会话。这不是规则,但可以。

我不确定,但我对你的问题有一个建议。Session有财产IsNewSession。微软说,它“获取一个值,指示会话是否是使用当前请求创建的。”

因此,您可以尝试检查Session登录用户是否是新用户,因为他可能会与旧用户共享会话,而且,这可能是一个原因,为什么一个人会看到其他人的个人资料。

于 2013-08-16T20:10:08.040 回答