Я восстановил базу данных и создал состояние сеанса с помощью этой команды.
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 уже достаточно?
У меня происходит нестабильное истечение срока действия сеанса, и я не уверен, что является причиной истечения срока действия сеанса. Пожалуйста, помогите новичку, документы, которые я нашел в Интернете, очень сбивают с толку. ТИА!
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 может оказаться нецелесообразным.
В некоторых случаях данные сеанса теряются при использовании режима состояния сеанса ASP.NET InProc. Но похоже, что вы используете режим SQL Server, поэтому я не уверен, правильно ли вы их настроили, как ответил член сообщества ниже. Возможно, вам стоит проверить этот документ: Режимы состояния сеанса — режим SQL Server.
Я по ошибке установил ASPState до версии 2.0.50727 на нашем рабочем сервере. Хотя я не уверен, является ли это причиной истечения срока действия сеанса. @Dai Моя локальная установка теперь установлена ASPState версии 2.0.50727 и использует режим SQL Server для состояния сеанса. Настройки теперь такие же, как у нашего производства. Я ни разу не столкнулся с истечением срока действия сеанса после изменения режима сеанса.
К сожалению, систему разрабатывал не я. Я поддерживаю задачи для системы, используя .Net Framework @LexLi.





То, что вы видите в IIS, должно отражать то, что у вас есть в файле web.config.
Однако большинство настроек можно установить на уровне сервера и переопределить на уровне веб-сайта. Итак, вы уверены, что ищете свой сайт в нужном месте?
Я мало работал с IIS в течение последнего года, и моя память угасает, но я думаю, что, скорее всего, вы просто смотрите на конфигурацию на более высоком уровне, а не на конфигурацию для этого конкретного веб-сайта.
Сейчас это больше похоже на комментарий, поскольку вы просите автора вопроса что-то подтвердить.
Да, вам необходимо изменить указанные выше настройки.
Вы должны выбрать 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.
Вероятно, это не имеет значения. Я думаю, что в более старой версии вместо varbinary(max) использовался столбец «image», но в любом случае операция практически одинакова. Вы, конечно, удаляете базу данных ASPState и повторно запускаете новый скрипт, но я не могу сказать, что это будет иметь большое значение.
... почему вы пытаетесь восстановить базу данных состояния сеанса ASP.NET 2.0 (с 2005 по 2009 год) сегодня, в 2024 году? Современные версии ASP.NET не смогут десериализовать старые данные состояния сеанса.