2013-04-25 114 views
0

我目前有一个网站,存储变量在用户登录,从数据库。一个这样的变量(成功登录)是SiteSession.Current.IsLoggedIn = true会话登录没有注销按钮点击

当我单击注销按钮时,我的方法会告诉它将其设置为false,然后继续执行Session.Clear()Session.Abandon()

到目前为止,我必须在做任何更改之前点击两次注销按钮。
我在我的Logout()方法中用Response.Write(SiteSession.Current.IsLoggedIn);进行了测试。

第一次点击并不显示任何内容,然后第二次点击显示false

有人能告诉我我在哪里;会出错吗?

/// <summary> 
/// Logs the user out, and destroys the session 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
protected void lnkAccountLogout_Click(object sender, EventArgs e) 
{ 
    SiteSession.Current.IsLoggedIn = false; 
    SiteSession.Current.RollId = "-1"; 

    Session.Clear(); 
    Session.Abandon(); 
    Response.Write(SiteSession.Current.IsLoggedIn); 
} 

〜登录基本上是相反的,虽然存储几个变量。

编辑:如果我在第一次点击后重新加载页面,则没有任何反应。

+0

它可能与viewstate/postback有关。我有一段时间没有在ASP.Net工作,但我认为如果(!IsPostBack){code}可以工作 – 0xFF 2013-04-25 13:33:51

+0

嘿..那/工作/每个说..不幸的是,它完全混淆了我的登录:/有了这个,它不会存储任何东西.. – TheGeekZn 2013-04-25 13:35:47

+0

你必须在登录方法中做同样的事情。你应该阅读关于视图状态,它可以是相当困惑 – 0xFF 2013-04-25 13:37:02

回答

0

它可能需要一些时间将更改存储在数据库中。尝试让它在另一个线程中运行并让线程等待直到IsLoggedIn为真。

我希望帮助=)

+1

通过其他非相关研究,我了解到,在开发Webserver中运行线程不是最好的事情:)此外,db是服务器本地的 - 更改是即时完成的。 ..我怀疑这是原因。 – TheGeekZn 2013-04-25 13:27:58

+0

嗯..我没有与网站工作呢..我很抱歉:/ – SplittyDev 2013-04-25 13:29:02

+0

完全酷:) – TheGeekZn 2013-04-25 13:30:54

0

的方式,我得到全面清理session是使一类的我Session

private Boolean _isNew = true; 
public Boolean isNew 
    { 
     get { return _isNew; } 
     set { _isNew = value; } 

    } 

在页面加载检查,如果它isNew如果是我

Session.Clear();

Session.Abandon();

当我曾与Session完成我只是做了该Session

//明确会议

SessionVars.Current.Incident =新的事件()的一个新实例;