2013-02-27 113 views
4

我在一个web应用程序使用成员资格提供来实现认证和用户/应用的部分角色的访问工作。ASP.NET LoginStatus:注销不工作

我用我的母版页或注销链接LoginStatus控制,但它的测试我发现,注销不起作用。如果我再次尝试访问我的应用程序的任何页面(后洛出)的页面显示...

我想这个问题取决于不会自动清除存储在用户会话数据。那就对了?

因此,这是实现注销,明确会议的corect方式?

注意 我不落实的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.configsystem.web部分:

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

我有这样的事情之前,我发现是问题了'SessionID'保持因无效的IIS设置更改,请确保您打印出'SessionID'页面,以确保其不会改变。 – Qpirate 2013-02-27 09:09:08

+0

“如果我尝试再次访问我的应用程序的任何页面(后洛出)的页面显示” - 你有在web.config中,以防止页面的任何东西显示给未授权的用户 - 例如拒绝用户=“?”在web.config中 – Joe 2013-02-27 09:33:31

+0

的System.Web程序/授权部@Joe是的......我编辑我的问题 – davioooh 2013-02-27 09:44:34

回答

0

拨打LoggedOut事件LoginStatus控制Session.Abandon()解决了这个问题,但我不知道这是否是实现这一目标的最佳方式。

+0

你可以发布你的'LogOut'行动吗?只是使用'FormsAuthentication.SignOut'可以说*更清洁:) – mattytommo 2013-02-27 11:19:57

+0

@mattytommo不幸的是'FormsAuthentication.SignOut'似乎不适合我... – davioooh 2013-02-27 15:16:40

2

我几乎失去了我的脑海里试图找到一个解决这个问题。在其他浏览器上一切正常,但firefox和chrome登录后不会将用户登录到初始页面。

当我设置表单的action属性中的Site.Master文件作为行动=“的Default.aspx”,它开始工作。

当我在浏览器调试看着表单动作有默认值,但在Chrome和Firefox的行动早已不是属性集。我在想这可能是.net登录状态控制脚本的问题。

因为我的系统现在工作我不会进一步搜索,但我希望这将是有益的具有类似问题的人。