我有一个使用默认成员资格控件的 ASP.NET 2010 Web 应用程序。当我登录时,主服务器上的登录控件会显示注销控件。当我单击该按钮时,它确实会将我重定向到默认页面,但我注意到,如果我导航回经过身份验证的页面,它会让我进入。因此,当单击注销链接时,我添加了以下代码以确保 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>
最佳答案
试试这个:
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 中运行过这个,所以请对我的打字持保留态度。
请告诉我这是否适合您。
关于asp.net-membership - 如何删除 ASP.NET 2010 中的 session cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4890705/