Данные сеанса ASP.Net теряются между страницами - PullRequest
6 голосов
/ 23 марта 2010

Сегодня я столкнулся со странным поведением с моим веб-приложением. Когда я перемещаюсь от страницы к другой, я теряю одну конкретную переменную данных сеанса.

Я могу запустить приложение в Firefox и увидеть, что данные сеанса не потеряны.

Я использую Response.Redirect(page2, false) для перенаправления на другую страницу.

Ниже код использовался для отслеживания переменных сеанса

System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\test.txt", true);
for (int i = 0; i < Session.Count; i++)
{
 sw.WriteLine(Session.Keys[i] + " " + Session.Contents[i]);
}
sw.Close();

Может ли кто-нибудь помочь мне в этом? Любая помощь приветствуется.

Ответы [ 4 ]

3 голосов
/ 29 сентября 2011

У меня была точно такая же проблема, и в моем случае я нашел причину этого поведения.Оказалось, что когда я вызывал метод Response.Redirect (), я использовал полный URL-адрес, а не просто имя страницы.Поэтому, когда я был в localhost / myapp / page1.aspx, я перенаправил на MYMACHINENAME / myapp / page2.aspx, и поэтому сессии были разными для каждой страницы.Я исправил это в своем коде, используя только "page2.aspx", а затем последний URL-адрес в любом браузере (IE, Firefox) был localhost / myapp / page2.aspx. Не знаю, играете ли вы с URL-адресами, как яделал это, но, возможно, этот ответ может дать вам подсказку.Спасибо и хорошего кодирования

0 голосов
/ 15 сентября 2013

Моя проблема заключалась в следующем: -

Проблема: когда мы переместили приложение ASP.NET на другой сервер (Windows Server 2008 R2) с IIS 7.5, приложение не может перемещать значения сеанса между страницами. например значение сеанса было установлено на первой странице, но оно не могло перейти на следующую страницу. На следующей странице значение для той же переменной сеанса было NULL.

Значения сеанса перемещались на следующую страницу в случае Google Chrome и Firefox, но не в Internet Explorer.

Разрешение: Мы создали имя URL с "_" (подчеркивание), например http://MySite_test.com. После удаления "_" он работает как требуется, например, http://MySitetest.com

Другое возможное решение:

  1. Используйте Response.Redirect с вторым параметром в качестве "false", чтобы избежать выполнения страницы и, таким образом, избежать потери сеансового токена. Вы должны использовать URL следующим образом. Response.Redirect («NextPage.aspx», false)

  2. Если пул приложений сайта настроен как веб-ферма или веб-сад (путем установки максимального числа рабочих процессов более одного) и если вы не используете службу сеансов или SQL сеансы, входящие запросы будут непредсказуемо переходить к одному из рабочих процессов, и если это не тот сеанс, на котором был создан сеанс, он будет потерян. Решением этой проблемы является либо не использование веб-сада, если вам не требуется повышение производительности, либо использование одного из поставщиков сеансов вне процесса.

0 голосов
/ 24 марта 2010

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

0 голосов
/ 24 марта 2010

Вы разрабатываете в среде веб-фермы / веб-сада?

...