2016-09-20 4 views
1

На моем сайте есть кнопка, в которой вы должны сначала войти. При щелчке он извлекает отчет из сервера отчетов ssrs и отображает его на той же странице. Я принял к сведению идентификатор сеанса, который он использовал в файле cookie запроса.Обновлено ASP.NET_Sessionid

Picture of session ID

Теперь, когда я очистить кэш и снова запустить отчет он получает следующее сообщение об ошибке «сеанс ASP.NET истек», но он получает печенье ответа с идентификатором сеанса.

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

Pic of new session ID

Каждый имеет представление о том, почему такое поведение происходит? Другие темы не дали мне подробного объяснения.

ответ

1

Какое ваше описание звучит совершенно нормально.

Идентификатор сеанса - это, по существу, указатель на виртуальную память, содержащую таблицу переменных, доступную для этого пользователя. Таблица не сохраняется навсегда - если структура ASP.NET не видит идентификатор сеанса в течение определенного времени (например, 20 или 30 минут, в зависимости от конфигурации), пространство памяти освобождается и возвращается для другого использования , Если этот идентификатор сеанса появится позже, он не будет знать, что с ним делать, и вы получите сообщение об ошибке «session has expired».

Первый идентификатор сеанса, который вы видели, вероятно, оставлен с предыдущего сеанса. Он старый, и его пространство памяти ушло, поэтому ASP.NET дает вам ошибку.

Второй идентификатор сеанса выдаётся автоматически для всех запросов, у которых нет действительного сеанса. ASP.NET автоматически создаст пространство памяти и случайный ключ и отправит его обратно в этот файл cookie ответов, который вы видели. Теперь, когда ваш браузер имеет обновленный cookie сеанса, запросы будут работать нормально, как вы можете видеть, когда вы нажимаете кнопку второй раз.

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