Сессия пустая после window.open на минимальной странице SharePoint - PullRequest
1 голос
/ 04 апреля 2011

Я храню токен в переменной сеанса. Я запускаю отчет, которому нужен этот токен, на новой странице ASPX с помощью функции javascript windows.open. Когда эта новая страница загружается, HttpContext.Current.Session имеет значение null.

Я справился с этим, передав токен в строке запроса, но активность в этом окне должна поддерживать активную сессию родительского окна, и я не уверен, что объект сеанса, имеющий значение null, означает для этого сценария.

Любая идея, почему объект HttpContext.Current.Session был бы нулевым, используя window.open из javascript?

РЕДАКТИРОВАТЬ: Я добавлю, что это базовый System.Web.UI.Page хранится в библиотеке SharePoint, и функция window.open вызывается из веб-части. Я думаю, что эта страница может быть унаследована от базового класса, чтобы разделить правильный контекст.

ОБНОВЛЕНИЕ : Я сузил, что это связано с SharePoint. Я переместил код, который обращается к объекту Session, в веб-часть. Веб-часть работает нормально, если поместить ее на стандартную страницу веб-части, но я добавил ее на минимальную страницу, которая содержит только ScriptManager, SPWebPartManager и WebPartZone. Код выполняется, но объект сеанса снова является нулевым. На моей минимальной странице отсутствует то, что делает объект Session доступным.

решено : Моя минимальная страница ASPX, необходимая для реализации интерфейса IRequiresSessionState. После этого появляется объект Session.

Я собираюсь отдать должное Андрею, так как он предложил самую полезную информацию.

Ответы [ 3 ]

2 голосов
/ 04 апреля 2011

Технически, это другое соединение с веб-сайтом, поэтому это другой сеанс. Вероятно, лучше использовать кэш приложений, а не сеанс, если вы хотите, чтобы разные окна использовали одно и то же хранилище сеансов.

UPDATE: Что вы можете сделать, если хотите придерживаться состояния сеанса, - это записать идентификатор сеанса в постоянный файл cookie, таким образом, вызов дочернего окна на сервер продолжит его, и вы сможете извлечь SessionID из этого файла cookie. ВАЖНО! Обязательно зашифруйте идентификатор сеанса, прежде чем помещать его в файл cookie, чтобы избежать перехвата сеанса.

1 голос
/ 05 апреля 2011

window.open() должен сохранять тот же идентификатор сеанса

window.open () очищает сеанс

, убедитесь, что URL, который вы передаете методу open()является относительным или тем же доменным именем

0 голосов
/ 05 апреля 2011

Я предполагаю, что вы используете IIS 6 или более позднюю версию.


Допустим, у вас есть 2 разных веб-сайта:

http://site1.yourdomain.com
http://site2.yourdomain.com

Может произойти 2 вещи

  1. Оба сайта работают под одним и тем же пулом приложений : сессия должна быть одинаковой для обоих сайтов.

    примечание: Internet Explorer до версии 8 получаетназначенный другой сеанс, если новейшее окно не было создано из текущего открытого окна.Начиная с версии 8 все окна, обращающиеся к одному и тому же пулу приложений, совместно используют одну и ту же версию независимо от источника окна.

  2. Сайты, работающие под разными пулами приложений в IIS : нетдаже если вы мечтаете, вы можете использовать один и тот же сеанс для обоих окон

Если веб-сайт одинаков для обоих окон, у вас не должно возникнуть проблем с совместным использованием сеанса между двумя окнами, даже с любой версиейInternet Explorer, поскольку второе окно создается из первого, вызывая метод window.open ().

...