2015-05-07 2 views
2

Моя сессия не разрушается. Это, как я поставил его в Login.aspx.cs:Как удалить значение из сеанса?

Session["User"] = UserName.Text; // Set the session called User. 

Ссылка на MasterPage:

<a href="Login.aspx" id="loginButton"><img src="images/login.png"><span runat="server" id="authspan">Login</span></a> 

Текст ссылки изменяется в зависимости от того, имеет ли пользователь сессии или нет:

if (Session["User"] != null) 
    { 
     authspan.InnerHtml = "Logout"; 
    } 
    else 
    { 
     authspan.InnerHtml = "Login"; 
    } 

Эта ссылка перенаправляет файл Login.aspx, в котором на PageLoad я говорю код, чтобы закрыть сеанс. Теоретически это должно работать, правильно?

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["User"] != null) 
    { 
     Response.Redirect("Default.aspx"); // Redirect user. 
     Session["User"] = null; 
     Session.Remove("User"); 
    } 
    else 
    { 
     // run code that logs the user in, and sets up the session. 
    } 

} 

Как я могу закончить его для зарегистрированного пользователя правильно?

+2

Вы не пытаетесь уничтожить сеанс, просто удалите из него значение, правильно? – mason

+0

Исправить, извиниться за неправильную формулировку. Все еще учусь. – hf185

ответ

5

Вы должны сначала очистить сеанс, а затем перенаправить.

Session["User"] = null; 
    Session.Remove("User"); 
    Response.Redirect("Default.aspx"); // Redirect user. 

Также обратите внимание, что безопаснее удалить идентификатор сеанса на стороне клиента тоже:

var sessionCookie = new HttpCookie("ASP.NET_SessionId"); 
    sessionCookie.Expires = DateTime.Now.AddDays(-1); 
    Response.Cookies.Add(sessionCookie); 
+0

Спасибо, что работает :) – hf185

0

Вы должны использовать:

Session.Clear(); 
Response.Redirect("Default.aspx"); 
0

вызов Session.Abandon(); (и я должен написать по крайней мере, 30 символов)

1

Чтобы удалить значение с сеанса различными способами

//Set the session variable 
Session["User"]=Value; 
//Destroy the session variable 
Session.Remove("User"); 
Session["User"]=null; 

// Abandon будет полностью уничтожить сессию, а это означает, что вам нужно, чтобы начать новый сеанс, прежде чем вы можете хранить все больше значения в сессии для данного пользователя Session.Abandon(); // Очистка сеанса не отменяет сеанс, он все еще существует с тем же идентификатором для пользователя, но с просто очищенными значениями. Session.Clear();

Смежные вопросы