2012-01-30 7 views
5

После успешного входа в систему я хочу сохранить файл cookie, содержащий имя пользователя.Сессия, потерянная при сохранении файла cookie

Файл cookie сохранен правильно и правильно загружает имя пользователя, но проигрывает сеанс!

Код для извлечь имя пользователя является:

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

Код для сохранения имени пользователя:

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

Любая помощь будет принята с благодарностью, спасибо

+3

Что вы подразумеваете под сессией? Сессия ASP.NET? Или сеанс аутентификации форм? И какие действия вы выполняете точно? Вы закрываете браузер между ними? –

+0

Сессия ASP.NET сбрасывается при переходе от формы входа в следующую форму. Это только после добавления кода выше. –

+0

Является ли вышеуказанный код в форме входа в систему или где-то еще? – M3NTA7

ответ

1

Я видел статью недавно предположил, что подчеркивания в именах страниц может вызвать проблемы в печенье, я не смотрел на это, но это может быть стоит проверить.

В качестве альтернативы, вы очищаете свои файлы cookie, если пользователь не захочет помнить?

Недавно я видел старый пример MSDN, показывающий метод удаления, который будет мусор вашей сессии ... read the article.

Если вы не забудьте удалить только файл cookie для входа в систему, вы можете потерять файл cookie, содержащий sessionid.

A (очень) быстрый перевод в CSharp кода статьи:

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); 
    } 

С раствор является добавление проверки на имя куки.

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); 
     } 
    } 

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

+0

Отличное спасибо, переменные сеанса терялись, когда я «не помнил» cookie с именем пользователя, я удалял все объекты cookie, включая идентификатор сеанса. Еще раз спасибо. –

2

Бит дикого выстрела , но переходите ли вы с https на http? Например. форма входа в систему - https, следующая страница: http:

Если так, то большинство браузеров будут отключать сеансовые файлы cookie.

Спасибо, Fran

+0

не использует https, это не относится. Спасибо. –