2015-07-06 2 views
3

Я пытаюсь сохранить выбор выпадающего списка в файл cookie в событии SelectedIndexChanged.Установка и извлечение файлов cookie в коде C# за

protected void BranchNumberList_SelectedIndexchanged(object sender, EventArgs e) 
{ 
    HttpCookie myCookie = new HttpCookie("default_Loc", BranchNumberList.SelectedValue); 
    myCookie.Expires = DateTime.Now.AddDays(365); 
    Response.Cookies.Add(myCookie); 
    ViewDate.Enabled = true; 
    SelectEverything(); 
} 

myCookie отлично выглядит, и я вижу его в объекте ответа с помощью быстрого переключателя.

Я пытаюсь получить его при следующем входе в систему, когда этот метод вызывается из Page_Load.

private void BranchName() 
{ 
    DatabaseHelpers dh = new DatabaseHelpers(); 
    DataSet DrpDownSrc = dh.FillBranchSelection(objConn); 
    BranchNumberList.DataSource = DrpDownSrc; 
    BranchNumberList.DataTextField = "BranchName"; 
    BranchNumberList.DataValueField = "LocationID"; 
    BranchNumberList.DataBind(); 
    BranchNumberList.Items.Insert(0, "Select a branch"); 
    try 
    { 
     BranchNumberList.SelectedValue = this.Request.Cookies["default_Loc"].Value; 
    } 
    catch (Exception) 
    { 
     BranchNumberList.SelectedIndex = 0; 
    } 
} 

Я всегда получаю 'this.Request.Cookies ["default_Loc"]' равно null.

Может ли кто-нибудь увидеть, где я ошибаюсь?

+0

Можете ли вы открыть свой browswer и проверить, установлен ли файл cookie? В Chrome вы откроете инструменты dev -> Resources -> Cookies -> page -> и увидите все файлы cookie, связанные с вашей страницей. – mituw16

+0

где вы устанавливаете значение для Request.Cookies ["default_Loc"] – Krishna

ответ

1

Ваш код выглядит нормально.

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

Первое, что я предлагаю, это определить, отправляется ли файл cookie в браузер. Используйте инструмент, например Fiddler или Wireshark, для проверки HTTP-трафика между сервером и браузером.

Если сервер не отправляет куки, выполните следующие проверки:

  • Поиск файла web.config для httpCookies секции. Если он присутствует, проверьте настройку requireSSL. Если для параметра requireSSL установлено значение true (т. Е. Https), но веб-сайт пытается отправить файл cookie поверх обычного http, cookie не будет отправлен в браузер.
  • Может быть, код, удаляющий файл cookie, до того, как ASP.Net завершит обработку страницы. Найдите свой код для таких вещей, как Cookies.Clear или Cookies.Remove.

Если файл cookie отправляется в браузер, следующий шаг - выяснить, правильно ли обрабатывает файл cookie. Попробуйте выполнить следующие действия, по крайней мере, в двух разных браузерах (например, Internet Explorer, Google Chrome, FireFox и т. Д.):

  • Проверьте дату и время работы компьютера, на котором работает браузер. Если дата/время компьютера установлена ​​в точку, истекающую дату истечения срока действия файла cookie, браузер будет считать, что файл cookie истек и не вернет его на сервер.
  • Проверьте настройки браузера и убедитесь, что он принимает файлы cookie.
  • Как указано в комментариях @ mituw16, откройте веб-сайт, связанный с файлом cookie, и используйте инструменты разработчика браузера, чтобы проверить файлы cookie и посмотреть, присутствует ли ваш файл cookie.
  • Если cookie нет, попробуйте создать очень простое приложение, как описано в ASP.NET Cookies Overview (прокрутите вниз до раздела «Определение использования браузера Cookies»).
  • Если файл cookie по-прежнему отсутствует в браузере, ваш браузер может иметь ошибку, особенно IE 11. IE 11 не будет хранить файлы cookie, если домен файла cookie содержит символ подчеркивания (например, http://www.my_web_site.com/) (см. Internet Explorer Cookie Internals (FAQ)) и IE 11 имеет проблемы с cookies в IFrames и modal popups (SO discussion). IE 11 также изменил строку User Agent, что вызывает даже more problems с куки-файлами.
Смежные вопросы