4

我正在使用 Membership Provider 开发一个 Web 应用程序来实现对应用程序部分的身份验证和用户/角色访问。

LoginStatus在我的母版页中使用控件作为注销链接,但测试它我发现注销不起作用。如果我尝试再次访问我的应用程序的任何页面(注销后),则会显示该页面...

我想这个问题取决于存储在用户会话中的数据不会自动清除。这是正确的?

那么实现注销和清除会话的正确方法是什么?

注意 我没有为LoginStatus控件实现任何事件。我正在使用表单身份验证。在我的登录页面中,我正在使用以下代码:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
   1, // Ticket version
   this.txtUser.Text, // Username associated with ticket
   DateTime.Now, // Date/time issued
   DateTime.Now.AddMinutes(30), // Date/time to expire
   true, // "true" for a persistent user cookie
   ruolo, // User-data, in this case the roles
   FormsAuthentication.FormsCookiePath);

string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
   FormsAuthentication.FormsCookieName,
   hash);

if (ticket.IsPersistent) { cookie.Expires = ticket.Expiration; }

Response.Cookies.Add(cookie);

在我的web.config system.web部分:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" loginUrl="login.aspx" protection="All" path="/" domain="keyforup.it"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>
4

2 回答 2

2

试图找到解决这个问题的方法时,我几乎失去了理智。在其他浏览器上一切正常,但 Firefox 和 chrome 在登录后不会在初始页面上注销用户。

当我在 site.master 文件中将表单的 action 属性设置为 action="default.aspx" 时,它开始工作。

当我查看资源管理器调试器时,表单操作具有默认值,但在 chrome 和 firefox 操作上没有设置属性。我认为这可能是 .net 登录状态控制脚本的问题。

由于我的系统现在可以工作,我不会进一步搜索,但我希望这对遇到类似问题的人有所帮助。

于 2013-05-23T13:39:48.970 回答
1

调用控制Session.Abandon()事件解决LoggedOutLoginStatus这个问题,但我想知道这是否是实现这一目标的最佳方式。

于 2013-02-27T10:14:51.633 回答