我有一个使用默认成员资格控件的ASP.NET 2010网络应用程序。当我登录时,Master上的Login控件显示一个Log out控件。当我点击它时,它会将我重定向到默认页面,但我注意到如果我导航回到经过身份验证的页面,它会让我进入。所以我在单击注销链接时添加了以下代码以确保cookie被杀死,
FormsAuthentication.SignOut()
Session.Abandon()
但我仍然可以导航到经过身份验证的页面。如果我实际关闭浏览器并重新打开它,它只会阻止我。
这是我的web.config ....
<authentication mode="Forms">
<forms
name=".ASPXAUTH"
loginUrl="~/Account/Login.aspx"
protection="All"
timeout="2880"
slidingExpiration="true"
defaultUrl="~/Authenticated/User/UserHome.aspx"
/>
</authentication>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
passwordFormat="Hashed"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="ApplicationServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/"/>
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="ApplicationServices" applicationName="/"
name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
答案 0 :(得分:4)
试试这个:
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddYears(-1)
FormsAuthentication.SignOut()
Session.Abandon()
// Now, forward to a safe unauthenticated page if SignOut() doesn't already do this.
Response.Redirect("/default.aspx")
这会尝试将ASP.NET_SessionID cookie设置为立即过期。浏览器应将其从集合中删除。我没有在VS2010中运行它,所以请用一粒盐打字。
如果这对您有用,请告诉我。