gpt4 book ai didi

php - 在 Zend 中重写 session ID 的东西

转载 作者:行者123 更新时间:2023-12-01 03:24:41 25 4
gpt4 key购买 nike

我试图使用jQuery.address插件来创建一些深层链接。但是,一旦我启动 .change() 函数并启动 JavaScript,我的后端 PHP 应用程序就会将我注销。

我推断,这一定是因为我启动的每个 ajax 请求似乎都在重新生成 session_id。

如果我尝试从 preDispatch 回显 session ID,则 sessionId 与启动请求的窗口中的 session ID 相同。

如果我尝试从 postDispatch 回显它,它已经更改为其他内容,并且当我刷新主窗口时,主窗口 sessionId 也已更改。

可能是什么设置的?

编辑2011年6月26日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 请求时, session 数据会以某种方式丢失。由于应用程序用户必须登录系统才能执行任何操作,因此在调用 getPaneContent() 函数之后(即在进行 ajax 调用之后)将显示登录屏幕。我用页面的一部分对此进行了测试,我不要求 session ,我发现 session 是空的。由于我没有清除数据,并且 session 超时尚未发生,因此肯定是 session ID 在执行 Ajax 请求时以某种方式发生了更改,因此新的 session ID 没有任何关联的数据有了它。

现在,问题是 - 如果我不使用 jQuery.address 插件,则不会发生注销。 ajax 工作得很好,但每个 ajax 响应都有一个 Set-Cookie header 集,它会更改主屏幕的 session ID。我确实认为,这可能以某种方式涉及到这个问题。 如何避免注销?

此外,只有当我从 $.address.change() 函数调用 f.selectFromLeftPanel() 时,才会发生注销。如果我忽略此调用,ajax 会工作, session ID 仍然会更改,但不会注销。

最佳答案

看来我已经找到解决办法了。

在 ajax 请求期间,我调用了一个扩展 Zend_Auth 的类,我用它来确定用户。好吧,在这个扩展类的 init() 函数中,我调用了 Zend_Session::rememberMe(60 * 60 * 24 * 7) ,因为我认为这是什么所做的是延长我的 session 的生命周期,而实际上,它会生成一个新的 session 来接收这个新的生命周期。

虽然我已经解决了这个问题,但它让我想知道,为什么它以前没有失败,为什么现在开始失败。

关于php - 在 Zend 中重写 session ID 的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6479961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com