В моем веб-приложении я использую диалоги jquery для открытия всплывающих окон. Функция, используемая для выполнения этой задачи заключается в следующем:Сессия заканчивается после закрытия диалога jquery
function OpenPopup(popupTarget, width, height, params, onOpenFunction, onCloseFunction, popupElement){
// some code to parse the parameters
//`popupElement` is a div with `style="display: none;"`
// included in a master page which every page inherits from
$(popupElement).dialog(
{
autoOpen: false,
resizable: false,
height: height,
width: width,
modal: true,
open: onOpenFunction,
closeOnEscape: false,
close: function (e)
{
var popupResult = $(this).dialog("option", "notification");
$(this).dialog("destroy");
if (!isHTMLElement)
popupFrame.css("visibility", "hidden");
if (jQuery.isFunction(onCloseFunction))
{
var funct = eval(onCloseFunction);
funct(popupResult);
}
}
});
$(popupElement).dialog("open");
}
Это функция, которая вызывает метод выше:
function FiltroNotifiche(){
params = "";
OpenPopup("~/manage/Popup/FiltroNotifiche.aspx", 450, 350, params, function (e) { }, function (strNotification)
{
OnPopupReturn(true, strNotification, function()
{
__doPostBack('UpdatePanel', 'Filtro=true');
});
});
}
function OnPopupReturn(bRefresh, strNotification, senderFunction){
// this function parses strNotification and if, successful, calls:
var funct = eval(senderFunction);
funct();
}
Внутри всплывающего окна я использую интерфейс ICallbackEventHandler
обратного вызова.
Проблема заключается в том, что после вскрытия и закрытия всплывающего окна (я вижу, как выполняется обратный вызов и все), что бы я ни делал дальше, меня выгоняют, скорее всего, потому что сессия истекло.
Странная вещь, которую я заметил, что это происходит только если я попасть на страницу, которая открывает всплывающее окно (GestioneNotifiche.aspx) через меню управления, потому что если я туда через кнопку PostBackUrl в другой странице , этого не происходит, и сессия живет счастливо!
В меню есть источник XML-данных и их привязки:
<DataBindings>
<asp:MenuItemBinding DataMember="Menu" TextField="Text" Selectable="false" />
<asp:MenuItemBinding DataMember="MenuItem" NavigateUrlField="NavigateUrl" TextField="Text" ValueField="Value" />
</DataBindings>
Это пункт меню:
<MenuItem Value="" Text="Gestione notifiche" NavigateUrl="~/manage/GestioneNotifiche/GestioneNotifiche.aspx" />
Я заметил вызов через меню имеет Request.HttpMethod = "GET"
, в то время как с помощью postback это (довольно очевидно) "POST"
. Может ли это быть значительным? Я не очень разбираюсь в различиях между GET и POST.
Спасибо
Что заставляет вас думать, что сеанс действительно заканчивается. После того, как вас «выгнали», можете ли вы вернуться к адресу и использовать debug, проверьте, содержит ли сессия переменные, которые вы ожидаете от него? –
С «kick out out» я имел в виду, что меня перенаправляют на страницу входа в приложение; Я не могу просто набрать адрес и загрузить страницу снова – Piddu
, поэтому кажется, что ваша аутентификация очищается ... не сеанс. У вас есть код в page_load, который используется для определения того, аутентифицирован ли пользователь и перенаправляется ли он, если он не является? Если да, вставьте его. –