Состояние сеанса .NET Framework

Я восстановил базу данных и создал состояние сеанса с помощью этой команды.

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql 
     -ssadd -sstype p -S IP_ADDRESS -U USER_ID sa1 -P USER_PASS

А в моем web.config у меня есть следующее:

<sessionState mode = "SQLServer" allowCustomSqlDatabase = "true" 
        sqlConnectionString = "Data Source=IP_ADDRESS;User Id=USER_ID;Password=USER_PASSWORD" cookieless = "false" timeout = "35"/>

Я использую IIS для размещения веб-сайта. Я заметил, что там есть конфигурация состояния сеанса, и она использует режим InProcess. Нужно ли мне обновлять состояние сеанса в IIS или моего Web.config уже достаточно?

У меня происходит нестабильное истечение срока действия сеанса, и я не уверен, что является причиной истечения срока действия сеанса. Пожалуйста, помогите новичку, документы, которые я нашел в Интернете, очень сбивают с толку. ТИА!

... почему вы пытаетесь восстановить базу данных состояния сеанса ASP.NET 2.0 (с 2005 по 2009 год) сегодня, в 2024 году? Современные версии ASP.NET не смогут десериализовать старые данные состояния сеанса.

Dai 06.06.2024 21:39

1) Вероятно, вы читаете очень старую статью и получаете инструкции, применимые только к древней ASP.NET 2.0–3.5. 2) Однако вы используете более позднюю версию Windows (более новую, чем Windows 7), где диспетчер IIS (на снимке экрана) считывает только настройки для ASP.NET 4.0+, которые недоступны для ASP.NET 2.0-3.5. Таким образом, ваш следующий выбор версии ASP.NET для размещения вашего веб-приложения имеет большое значение. Обратите внимание, что сообщество .NET в последние годы перешло на ASP.NET Core, поэтому изучение устаревших версий ASP.NET может оказаться нецелесообразным.

Lex Li 07.06.2024 00:17

В некоторых случаях данные сеанса теряются при использовании режима состояния сеанса ASP.NET InProc. Но похоже, что вы используете режим SQL Server, поэтому я не уверен, правильно ли вы их настроили, как ответил член сообщества ниже. Возможно, вам стоит проверить этот документ: Режимы состояния сеанса — режим SQL Server.

Xudong Peng 07.06.2024 10:57

Я по ошибке установил ASPState до версии 2.0.50727 на нашем рабочем сервере. Хотя я не уверен, является ли это причиной истечения срока действия сеанса. @Dai Моя локальная установка теперь установлена ​​ASPState версии 2.0.50727 и использует режим SQL Server для состояния сеанса. Настройки теперь такие же, как у нашего производства. Я ни разу не столкнулся с истечением срока действия сеанса после изменения режима сеанса.

Cj Cabug-os 11.06.2024 17:48

К сожалению, систему разрабатывал не я. Я поддерживаю задачи для системы, используя .Net Framework @LexLi.

Cj Cabug-os 11.06.2024 17:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
110
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

То, что вы видите в IIS, должно отражать то, что у вас есть в файле web.config.

Однако большинство настроек можно установить на уровне сервера и переопределить на уровне веб-сайта. Итак, вы уверены, что ищете свой сайт в нужном месте?

Я мало работал с IIS в течение последнего года, и моя память угасает, но я думаю, что, скорее всего, вы просто смотрите на конфигурацию на более высоком уровне, а не на конфигурацию для этого конкретного веб-сайта.

Сейчас это больше похоже на комментарий, поскольку вы просите автора вопроса что-то подтвердить.

Lex Li 07.06.2024 00:23
Ответ принят как подходящий

Да, вам необходимо изменить указанные выше настройки.

Вы должны выбрать SQL Server на снимке экрана.

И в большинстве случаев вам следует установить флажок «Разрешить пользовательскую базу данных».

Когда вы измените вышеуказанное, веб-конфигурация должна привести к чему-то вроде этого:

<sessionState allowCustomSqlDatabase = "true" 
      customProvider = "DefaultSessionProvider" 
      mode = "SQLServer" sqlConnectionString = "ASPState">
</sessionState>

Итак, если вы настроили строку подключения в своей веб-конфигурации, то раскрывающийся список в IIS должен иметь ту настройку строки подключения, которая у вас есть. Если нет, то вы можете использовать соединение create, и оно, конечно, затем изменит web.config для вас.

Итак, в области строк подключения web.config вам необходимо настроить строку подключения для базы данных ASPState.

Следовательно:

<add name = "ASPState" 
connectionString = "Data Source=XX.XX.XXX.XXXX\SQLEXPRESS,database=ASPState;
UID=MyUser;PWD=MyPass;APP=WebPortal;WSID=WebPortal"
providerName = "System.Data.SqlClient" />

(выше подключение в одну строку - выше для удобства чтения).

Также имейте в виду, что если вы запустите диспетчер SQL, вы заметите, что при создании базы данных ASPState?

Таблицы сеансов создаются, используются и запускаются как временные таблицы и фактически размещаются в системной базе данных «tempdb»!

Это может сбить с толку, поскольку если вы перезагружаете SQL Server, все базы данных temp db удаляются. Однако в базе данных ASPState есть некоторые хранимые процедуры, которые запускаются при запуске сервера и заново создают базу данных сеанса. Итак, это просто к сведению, поскольку может сбить с толку тот факт, что база данных ASPState создается, но фактические таблицы сеансов создаются и используются из системной базы данных «tempdb», а НЕ из базы данных ASPState.

Другой вопрос, конечно, заключается в том, используете ли вы SQL Server Express или полную версию SQL Server?

Это важно, поскольку версия Express не включает так называемый «агент» SQL, который используется для автоматического запуска запланированных задач SQL Server. Эти задачи включают в себя очистку базы данных сеансов каждые 10 минут или что-то в этом роде.

Это означает, что если вы используете SQL Server Express, то автоматическая очистка и удаление строк сеанса (в этой базе данных tempdb) не происходит. Это означает, что вам необходимо настроить собственное запланированное задание (скажем, с помощью планировщика Windows) для удаления и очистки базы данных сеансов (я предлагаю делать это ежедневно). Итак, имейте в виду две вещи, которые сбивают с толку:

Хотя база данных ASPState создается при запуске этого сценария, фактические используемые таблицы сеансов создаются в базе данных tempdb.

Если вы перезагрузите SQL Server, база данных tempdb будет очищена, а следовательно, и таблицы сеансов.

Однако в ASPState есть некоторые хранимые процедуры, настроенные для запуска при запуске SQL Server для повторного создания таблиц сеанса. Это отлично работает как для SQL Server, так и для SQL Express Edition.

Однако, поскольку в SQL Express нет встроенного «агента» SQL, вам необходимо настроить собственную запланированную задачу для очистки таблиц сеанса (в противном случае они станут довольно большими без автоматического удаления строк сеанса).

Спасибо вам большое за это. Моя локальная установка использовала InProc, следовательно, срок действия сеанса истек. Но наш рабочий сервер действительно использует режим SQL Server, и это отражается на IIS. Как я упоминал выше, для установки ASPState я использовал платформу v2.0.50727 вместо v4 на нашем рабочем сервере. Влияет ли это на HTTP-сессии? После обновления моей локальной настройки для использования SQL Server я не обнаружил истечения срока действия сеанса. Я также даже установил ASP State, используя платформу v2.0.50727.

Cj Cabug-os 11.06.2024 17:38

Вероятно, это не имеет значения. Я думаю, что в более старой версии вместо varbinary(max) использовался столбец «image», но в любом случае операция практически одинакова. Вы, конечно, удаляете базу данных ASPState и повторно запускаете новый скрипт, но я не могу сказать, что это будет иметь большое значение.

Albert D. Kallal 11.06.2024 21:46

Другие вопросы по теме