2012-01-30 13 views
5

Po pomyślnym zalogowaniu chcę zapisać plik cookie, który zawiera nazwę użytkownika.Sesja utracona podczas zapisywania cookie

Plik cookie jest zapisywany poprawnie i poprawnie ładuje nazwę użytkownika, ale traci sesję!

Kod dla retreive login to:

if (Request.Cookies["userName"] != null) 
{ 
    txtEmail.Text = Request.Cookies["username"].Value; 
    chkRemember.Checked = true; 
} 

kod, aby zapisać nazwę użytkownika jest:

HttpCookie aCookie = new HttpCookie("username"); 
aCookie.Value = txtEmail.Text; 
aCookie.Expires = DateTime.Now.AddYears(5); 
Response.Cookies.Add(aCookie); 

Każda pomoc będzie bardzo mile widziane, dziękuję

+3

Co masz na myśli podczas sesji? Sesja ASP.NET? Lub tworzy sesję uwierzytelniania? Jakie dokładnie czynności wykonujecie? Czy zamykasz przeglądarkę pomiędzy? –

+0

Sesja ASP.NET jest resetowana podczas nawigacji z formularza logowania do następnego formularza. Jest to możliwe tylko po dodaniu powyższego kodu. –

+0

Czy powyższy kod znajduje się w formularzu logowania, czy gdzieś indziej? – M3NTA7

Odpowiedz

1

Widziałem artykuł niedawno zasugerował, że podkreślenia w nazwach strona może powodować problemy z ciasteczek, nie wyglądało na to, ale może warto sprawdzić.

Alternatywnie, czy wyczyścisz ciasteczka, jeśli użytkownik nie zdecyduje się na zapamiętywanie?

Widziałem starą przykład niedawno na MSDN przedstawiający metodę usuwania że będą zdarzały sesję ... read the article.

Jeśli tak, koniecznie usuń tylko plik cookie z logowania, w przeciwnym razie możesz utracić plik cookie zawierający identyfikator sesji.

A (bardzo) tłumaczenie szybkie do CSharp kodu artykułu:

for (int i = 0; i < limit; i++) 
    { 
     cookieName = Request.Cookies[i].Name; 
     aCookie = new HttpCookie(cookieName); 
     aCookie.Expires = DateTime.Now.AddDays(-1); 
     Response.Cookies.Add(aCookie); 
    } 

Z istoty rozwiązania dodając czek na imię cookie.

for (int i = 0; i < limit; i++) 
    { 
     cookieName = Request.Cookies[i].Name; 
     if (cookieName == "username") 
     { 
      aCookie = new HttpCookie(cookieName); 
      aCookie.Expires = DateTime.Now.AddDays(-1); 
      Response.Cookies.Add(aCookie); 
     } 
    } 

Również nie zapomnij można użyć podklucze ciągu cookies.

+0

Bardzo dziękuję, zmienne sesji zostały utracone, gdy "nie pamiętałem" pliku cookie bez nazwy, kasowałem wszystkie obiekty cookie, w tym identyfikator sesji. Jeszcze raz dziękuję. –

2

trochę dzikim strzale , ale czy przechodzisz z https na http? Na przykład. Formularz logowania to https, następująca strona to http

Jeśli tak, większość przeglądarek wyłączy pliki cookie sesji.

Dzięki Fran

+0

nie używając https, to nie dotyczy. Dziękuję Ci. –

Powiązane problemy