Вопрос: Почему на некоторых машинах иногда теряется сессия?
Ответ: Это может быть связано со средой компьютера, например с брандмауэром или антивирусным программным обеспечением. Попробуйте отключить брандмауэр.
Вопрос: Почему метод Session_End не запускается при вызове Session.Abandon?
Ответ: Прежде всего, метод Session_End поддерживает только сеанс типа InProc (в процессе). Во-вторых, для активации метода Session_End Сессия должна существовать (то есть Сессия использовалась в системе) и должен быть выполнен хотя бы один запрос (в этом запросе будет вызываться этот метод).
Вопрос: Почему моя сессия часто теряется, когда я использую ее в режиме InProc?
Ответ: Эта проблема обычно возникает из-за перезапуска приложения, поскольку при использовании внутрипроцессного сеанса сеанс сохраняется в процессе aspnet_wp. Когда процесс перезапускается, сеанс, естественно, исчезает. были переработаны, вы можете использовать программу просмотра событий вашей системы для получения информации.
Для получения конкретной информации, пожалуйста, обратитесь к:
Переменные сеанса периодически теряются в приложениях ASP.NET.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316148
В версии 1.0 также была ошибка, приводившая к перезапуску и перезапуску рабочего процесса. Эта ошибка была исправлена в версиях 1.1 и SP2.
Подробную информацию об этой ошибке можно найти по адресу:
Рабочий процесс ASP.NET (Aspnet_wp.exe) неожиданно перезапускается.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321792
Вопрос: Почему идентификатор нового сеанса совпадает с исходным после того, как сеанс истек или был прерван?
Ответ: Поскольку идентификатор сеанса сохраняется в экземпляре клиентского браузера, по истечении времени сеанса и его повторной установки на сервере будет использоваться идентификатор сеанса, переданный браузером. Поэтому после истечения времени сеанса будет использоваться идентификатор сеанса. Идентификатор сеанса не изменится после его повторного установления.
Вопрос: Почему SessionID разный для каждого запроса?
Ответ: Данная проблема может быть вызвана тем, что в Сессии не сохраняется никакая информация, то есть Сессия нигде в программе не используется. После сохранения информации в сеансе SessionID всегда будет связан с браузером, и в настоящее время SessionID не изменится.
Вопрос: Можно ли использовать сеанс совместно с ASP и ASP.NET?
Ответ: Да. Но это относительно сложный процесс. Microsoft предоставляет официальное решение. См.: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ConvertToASPNET.aspQ.
: Какие типы объектов можно сохранять в сеансе?
Ответ: Это зависит от используемого режима сеанса. При использовании внутрипроцессного сеанса (InProc) любой объект можно легко сохранить. Если вы используете режим, отличный от InProc, вы можете сохранять только объекты, которые можно сериализовать и десериализовать. Если объект, сохраненный в этот момент, не поддерживает сериализацию, его нельзя сохранить в сеансе этого режима (не InProc).
Вопрос: Почему я не могу использовать методы Response.Redirect и Server.Transfer в Session_End для перехода на страницу?
Ответ: Session_End — это функция обработки событий, запускаемая внутри сервера. Он основан на таймере внутри сервера. Когда событие запускается, на сервере нет соответствующего объекта HttpRequest, поэтому в настоящее время методы Response.Redirect и Server.Transfer использовать нельзя.
Вопрос: Могу ли я получить объект HttpContext в Session_End?
Ответ: Нет, поскольку это событие не связано ни с каким запросом (Request) и не имеет контекста на основе запроса.
Вопрос: Как использовать сеанс в веб-сервисе?
Ответ: Чтобы использовать сеанс в веб-службе, вызывающей стороне веб-службы необходимо выполнить дополнительную работу, а файл cookie, используемый при вызове веб-службы, должен быть сохранен и сохранен. Дополнительные сведения см. в документации MSDN для свойства HttpWebClientProtocol.CookieContainer. Однако если вы используете прокси-сервер для доступа к веб-службе из-за ограничений платформы, они не могут совместно использовать сеанс.
Вопрос: Почему я не могу использовать Session при настройке собственного HttpHandler?
Ответ: При реализации собственного HttpHandler, если вы хотите использовать Session, вы должны реализовать один из следующих двух интерфейсов метки: IRequiresSessionState и IReadOnlySessionState. Эти интерфейсы не имеют никаких методов, которые необходимо реализовать. Это просто интерфейс метки. метод использования интерфейса INamingContainer.
Вопрос: Когда я использую веб-ферму, почему сеанс теряется при перенаправлении на другой веб-сервер?
Ответ: Подробную информацию см.:
PRB: состояние сеанса теряется в веб-ферме, если вы используете режим сеанса SqlServer или StateServer
http://support.microsoft.com/default.aspx?scid=kb;en-us;325056Q
: Почему мой сеанс недействителен в методе Application_OnAcquireRequestState?
Ответ: Сеанс будет действителен только после вызова события HttpApplication.AcquireRequestState.
Для получения подробной информации, пожалуйста, обратитесь к:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconhandlingpublicevents.asp
Вопрос: Как мне перейти со страницы HTTP на HTTPS, если используется отсутствие файлов cookie?
Ответ: Попробуйте следующие методы:
String originalUrl = "/fxtest3/sub/foo2.aspx";
StringmodifiedUrl = " https://localhost " + Response.ApplyAppPathModifier(originalUrl);
Response.Redirect(modifiedUrl);
Вопрос: Сессия действительна в этих событиях в global.asax?
Ответ: Сеанс действителен только после события AcquireRequestState, а события после этого события могут использовать сеанс.
Вопрос: Как сохранить все объекты в текущем сеансе?
Ответ: Его можно получить, пройдя по всем Session.Keys. Код выглядит следующим образом:
ArrayList sessionCollection = новый ArrayList();
foreach (строка strKey в Session.Keys) {
sessionCollection.Add(Session[strKey]);
}
Вопрос: Можно ли использовать сеансы в разных приложениях?
Ответ: Им нельзя поделиться напрямую. Вы можете узнать, как совместно использовать сеанс между ASP и ASP.NET.
Вопрос: В чем разница между Session.Abandon и Session.Clear?
Ответ: Основное отличие в том, что при использовании Session.Abandon вызывается метод Session_End (в режиме InProc). Метод Session_Start будет запущен при поступлении следующего запроса. Session.Clear только очищает все данные в сеансе и не завершает сеанс, поэтому эти методы не будут вызываться.
Вопрос: Для последовательного доступа к значению состояния сеанса предусмотрен ли в сеансе механизм блокировки?
Ответ: В сеансе реализован механизм блокировки чтения/записи:
Если страница имеет возможности записи для сеанса (то есть страница имеет тег <%@ Page EnableSessionState="True" %>), сеанс страницы удерживает блокировку записи до тех пор, пока запрос не будет завершен.
Если страница имеет функцию «только чтение» для сеанса (то есть страница имеет тег <%@ Page EnableSessionState="ReadOnly" %>), сеанс, запросивший завершение страницы, удерживает блокировку чтения.
Блокировка чтения блокирует блокировку записи; блокировка чтения не блокирует блокировку чтения; блокировка записи блокирует все блокировки чтения и записи. Вот почему, когда одна и та же страница в двух кадрах записывается в один и тот же сеанс, один из них должен дождаться завершения другого (немного более быстрого), прежде чем начать запись.
Вопрос: Что означает тайм-аут плавного сеанса?
Ответ: Плавный таймаут сеанса означает, что пока ваша страница обращается (использует) к Сеансу, таймаут будет обновляться (можно понимать как ретайминг), то есть таймаут будет пересчитываться, начиная с запроса страницы. Однако страница не может отключить сеанс. Он автоматически получит доступ к сеансу текущей страницы и обновит тайм-аут.
Вопрос: Почему сеанс недействителен в функции обработки событий в global.asax?
Ответ: Это зависит от того, в какой функции обработки событий используется сеанс. Сессия действительна только после события AcquireRequestState. Все функции обработки событий после этого события могут использовать сеанс, но не те, которые были до него.
Вопрос: Когда я пишу компонент, который зависит от сеанса текущего приложения, почему я не могу напрямую использовать Session["Key"] для получения его значения?
Ответ: Session["Key"] на самом деле — это this.Session["Key"], который предоставляется как свойство Page, поэтому вы не можете использовать это свойство непосредственно в своем компоненте. Вы можете использовать сеанс следующими способами:
HttpContext.Current.Session["Key"] = "Мое значение Seesion";
Вопрос: Когда я использую режим InProc для сохранения сеанса, где в этот момент сохраняется сеанс?
Ответ: Разные IIS имеют разные методы обработки.
При использовании IIS5 сеанс сохраняется в пространстве процесса aspnet_wp.exe.
При использовании IIS6 все приложения по умолчанию используют общий пул приложений, а сеанс сохраняется в пространстве процесса w3wp.exe.
Вопрос: Время ожидания сеанса указано в минутах или секундах?
Ответ: Это минуты, значение по умолчанию — 20 минут.
Вопрос: Будет ли сохранена моя сессия, если на странице возникнет ошибка? Мне нужно выполнить некоторую очистку в Session_End, но она не удалась. Почему?
Ответ: Session_End будет выполняться только тогда, когда сеанс работает в режиме InProc. Учетная запись, используемая Session_End, — это учетная запись, запускающая рабочий процесс aspnet_wp (это можно настроить в файле Machine.config). Поэтому, если вы используете встроенную безопасность для подключения к SQL в методе Session_End, ссылка будет открыта с использованием учетной записи процесса aspnet_wp, и успех или неудача в этот момент зависит от ваших настроек безопасности SQL.
Вопрос: Почему я теряю сеанс при перенаправлении, когда для параметра cookieless установлено значение true?
Ответ: При использовании файлов cookie необходимо использовать относительные пути для замены абсолютных путей в программе. Если вы используете абсолютные пути, ASP.NET не сможет сохранить SessionID в URL-адресе.
Например: замените myDirmySubdirdefault.aspx на ..default.aspx.
Вопрос: Как хранить SortedList в сеансе или кеше?
Ответ: Пожалуйста, обратитесь к следующим методам:
SortedList x = новый SortedList();
x.Add("Ключ1", "ЗначениеА");
x.Add("Ключ2", "ЗначениеB");
Сохранить в сеанс:
Сессия["СортированныйСписок1"] = х;
Чтобы получить его, используйте следующий метод:
SortedList y = (SortedList) Session["SortedList1"];
То же самое касается и Чахе.
Вопрос: Почему я получаю сообщение об ошибке «Состояние сеанса можно использовать только в том случае, если для параметра EnableSessionState установлено значение true либо в файле конфигурации, либо в директиве Page»?
Ответ: Эта проблема может возникнуть после установки Window Sharepoint Server (WSS) на компьютере, на котором установлена среда разработки Microsoft Visual Studio .NET.
Фильтр WSS ISAPI будет обрабатывать все запросы. Когда вы просматриваете приложение ASP.NET через виртуальный каталог, фильтр ISAPI не назначает URL-адреса каталогу папки.
Решение: не используйте сеанс на компьютере, где установлен WSS.
Для получения подробной информации, пожалуйста, обратитесь к:
Состояние сеанса нельзя использовать в ASP.NET с Windows SharePoint Services.
http://support.microsoft.com/default.aspx?scid=kb;en-us;837376В
: Как удалить переменные сеанса?
Ответ: Если вы хотите удалить переменную сеанса, вы можете использовать метод HttpSessionState.Remove().
Вопрос: Есть ли способ узнать, сколько памяти занимает сеанс приложения во время его работы?
Ответ: Нет. В настоящее время это значение невозможно проверить, по крайней мере, я пока не видел никакой информации по этому поводу. Однако значение можно приблизительно оценить с помощью монитора производительности и программного кода.
Вопрос: Когда на странице есть набор фреймов, обнаруживается, что идентификатор SessionID страницы, отображаемый в каждом фрейме, отличается в первом запросе. Почему?
Ответ: Причина в том, что ваш набор фреймов размещается на странице html, а не на странице ASPX.
В обычных обстоятельствах, если набор фреймов представляет собой страницу aspx, когда вы запрашиваете страницу, она сначала отправляет запрос на веб-сервер, и идентификатор сеанса был получен. Затем браузер будет запрашивать другие страницы в фрейме соответственно, так что SessionID всех страниц. То же самое, это SessionID страницы FrameSet.
Однако если вы используете страницу Html для создания страницы FrameSet, первым запросом будет страница HTML. Когда страница возвращается с сервера, сеанс не создается. Затем браузер запросит страницы во фрейме. страницы будут генерировать свой собственный SessionID, поэтому в этом случае возникает эта проблема. Когда вы обновите страницу, SessionID будет таким же, и это будет SessionID последней запрошенной страницы.
Вопрос: Можно ли сохранять сессии разных приложений в разных базах данных на одном сервере SQL Server.
Ответ: Да, пожалуйста, обратитесь к:
ИСПРАВЛЕНИЕ: Использование одной базы данных SQL для всех приложений для состояния сеанса SQL Server может вызвать узкие места.
http://support.microsoft.com/default.aspx?scid=kb;en-us;836680Q
: Могу ли я получить действительные объекты HttpSessionState и HttpContext в Session_End?
Ответ: Вы можете получить объект HttpSessionState в этом методе и получить к нему прямой доступ с помощью Session. Однако объект HttpContext получить невозможно, поскольку событие не связано ни с каким запросом, поэтому объект контекста отсутствует.
Вопрос: Почему при использовании сеанса в режиме SQL Server срок действия сеанса не истекает?
Ответ: В режиме SqlServer истечение срока действия сеанса завершается регистрацией агента SQL. Проверьте, запущен ли ваш агент SQL.
Вопрос: После того как я установил для EnableSessionState значение «ReadOnly», я все равно могу изменять значение сеанса в режиме InProc. Почему это так?
Ответ: Даже если параметр EnableSessionState отмечен как ReadOnly, пользователи все равно смогут редактировать сеанс в режиме InProc. Единственное отличие состоит в том, что сессия не будет заблокирована во время запроса.
Вопрос: Как избежать указания пароля при связывании SQL?
Ответ: Используйте доверенную ссылку или используйте зашифрованную строку ссылки. Для получения дополнительной информации об этом, пожалуйста, обратитесь к:
Как использовать утилиту ASP.NET для шифрования учетных данных и строк подключения состояния сеанса
http://support.microsoft.com/default.aspx?scid=kb;en-us;329290В
: Как мне использовать сеанс в моем собственном классе?
Ответ: Вы можете использовать HttpContext.Current.Session. Конкретный метод выглядит следующим образом:
HttpContext.Current.Session["SessionKey"] = "SessionValue";
Аналогичным образом вы можете использовать объект Application таким образом.
Вопрос: Почему мой запрос зависает после переключения в режим SQL Server?
Ответ: Проверьте, все ли объекты, сохраненные в Сеансе, могут быть сохранены в режиме SQL Server, то есть эти объекты должны поддерживать сериализацию.
Вопрос: Каковы будут последствия, если для сеанса будет отключено использование файлов cookie?
Ответ: Если для параметра «без файлов cookie» установлено значение «истина», в основном существуют следующие ограничения:
1. На странице нельзя использовать абсолютные ссылки.
2. Помимо переключения между HTTP и HTTPS, в приложении необходимо выполнить еще некоторые действия.
Если вы отправите ссылку другому человеку, URL-адрес в это время будет содержать информацию об идентификаторе сеанса, поэтому два человека будут использовать сеанс совместно.
Вопрос: Можно ли сохранить сессию в базе данных?
Ответ: Конечно, подробную информацию можно найти по адресу: http://support.microsoft.com/default.aspx?scid=kb;en-us;311209
--------------- -- ------------------------------------------------ -- ------------------------------------------------ -- -
Вопрос: Почему моя сессия часто теряется, когда я использую ее в режиме InProc?
Дополнительная ситуация: если вы используете базу данных Access, чтобы предотвратить загрузку базы данных, некоторые люди могут подумать о помещении файла базы данных в каталог bin, чтобы базу данных нельзя было загрузить. Однако, если она находится в режиме InProc. , это также приведет к потере сеанса. Потому что при доступе к приложению данные будут часто записываться в базу данных, что приведет к изменениям в файлах базы данных, размещенных в каталоге bin, а изменения в каталоге bin приведут к потере сеанса.
Чтобы решить эту проблему, вы можете изменить путь хранения файла базы данных или использовать режим StateServer или SqlServer.
Для получения дополнительной информации см.:
PRB: данные сеанса теряются при использовании режима состояния сеанса ASP.NET InProc
http://support.microsoft.com/default.aspx?scid=kb;en-us;324772
-------------------------------------------------- -----------------------
Общий сеанс с несколькими проектами в Asp.net, выбранный из блога dnyz
http://dev.csdn.net/article/21/21714.shtm
1. Создайте пустое решение, например: d:MyProjectMyProject.sln.
2. Создайте корневой каталог веб-приложения d:MyProjectWebMis в d:MyProject и установите для него виртуальный каталог http://localhost/WebMis.
3. Создайте новые каталоги в соответствии с модулями в каталоге WebMis, например: d:MyProjectWebMisLogin и d:MyProjectWebMisCheckOut.
4. Создайте новое веб-приложение на основе модуля в VS.net, например: http://localhost/WebMis/Login и http://localhost/WebMis/CheckOut.
5. После создания каталоги входа и выхода автоматически устанавливаются как виртуальные каталоги.
6. Добавьте ссылки на проект для входа и выхода в проект WebMis.
7. Удалите виртуальные каталоги входа и выхода в диспетчере IIS.
8. Удалите global.asax каждого проекта (удалите корневой проект).
9. Удалите следующий код из файла web.config проекта (удалите корневой проект):
<режим аутентификации="Windows" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="источник данных=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />
Либо удалите web.config (если не нужно настраивать в каждой директории)
10. После компиляции его можно запускать.