【发布时间】:2011-09-22 17:23:29
【问题描述】:
我试图使用jQuery.address 插件来创建一些深层链接。但是一旦我启动.change() 函数并启动了一个javascript,我的后端PHP 应用程序就会让我退出。
我推断,这一定是因为我启动的每个 ajax 请求似乎都在重新生成 session_id。
如果我尝试从 preDispatch 回显会话 ID,则 sessionId 与启动请求的窗口中的相同。
如果我尝试从 postDispatch 回显它,它已经更改为其他内容,并且当我刷新主窗口时,主窗口 sessionId 也已更改。
可能是什么设置?
编辑 26-06-2011 12:00
我发现似乎破坏了我的应用程序的代码。
在我用哈希 (#) 重新加载页面后,我使用 $.address.change() 函数内的函数来找出要加载的状态。由于我只使用了我的应用程序中的 3 个面板之一,因此它只检查一个参数,如下所示:
urlVar=this.path();
resArray = urlVar.split('/');
urlVariable = resArray.shift();
if (typeof urlVariable != "undefined") {
f.selectFromLeftPanel(urlVariable);
}
在selectFromLeftPanel() 中是这样的:
if (typeof context == "object") {
var itemId = $(context).attr('id');
$("#" + itemId).addClass('loading');
Frontpage.closePanes();
$.address.value(itemId);
} else if (typeof context == "string") {
itemId = context;
}
switch (itemId) {
case 'zebra_left_window_forms':
c.log($(this));
Frontpage.resetPane(Frontpage.firstPane);
Frontpage.getPaneContent(Frontpage.startCategory,
Frontpage.firstPane, 'category', function() {
f.showPane(Frontpage.firstPane, itemId);
});
f.setSelected(context, f.zeroPane);
break;
}
pane 只是我用来隐藏/显示不同内容区域的列。 getPaneContent() 函数是进行 ajax 调用的地方,如下所示:
$.get(Frontpage.BASEURL + data + "/rand/" + rand + "/value/"
+ value + "/time/" + Math.random(), function(result) {
Frontpage.resetPane(pane);
var $newrow = $(into).find('div:first');
// c.log($newrow);
$($newrow).after(result);
var retValue = $('#returnData', pane).html();
c.log(retValue);
$('#returnData', pane).remove();
$('#zebra_content_pane_back_button').attr('href', retValue);
$('#zebra_content_pane_back_button').attr('rel', retValue);
Frontpage.hideBackButton();
if (callbackFn) {
if (typeof callbackFn == 'function') {
callbackFn.call(this);
}
}
delete result;
});
好的,现在更详细地介绍问题本身:
发生的情况是,在发出 ajax 请求时,会话数据不知何故丢失了。由于应用程序用户必须登录系统才能执行任何操作,因此在调用 getPaneContent() 函数之后会显示登录屏幕,因此在进行 ajax 调用之后。我用我的页面的一部分进行了测试,我没有要求会话,我看到会话是空的。由于我没有清除数据,并且会话的超时尚未发生,因此在执行 Ajax 请求时会话 ID 一定会发生某种变化,因此新的会话 ID 没有任何关联的数据用它。
现在,问题 - 如果我不使用 jQuery.address 插件,则不会发生注销。 ajax 工作得很好,但是每个 ajax 响应都有一个Set-Cookie 标头集,它会更改主屏幕的会话 ID。我确实认为,这可能会以某种方式涉及问题。 如何避免注销?
此外,只有在我从 $.address.change() 函数调用 f.selectFromLeftPanel() 时才会发生注销。如果我省略这个调用,ajax 工作,会话 ID 仍然改变,但没有注销。
【问题讨论】:
标签: php jquery ajax session jquery-plugins