输出后没有写入PHP会话(外部ajax调用上的echo或print_r)

时间:2011-04-11 21:57:34

标签: php ajax session session-variables

6 个答案:

答案 0 :(得分:1)

我遇到了类似的问题(如果我理解正确的话)。我需要在脚本运行完毕后强制写入会话数据(对于自定义会话驱动程序)。可以注册关闭函数,该函数应在脚本完成后运行。

这可能会解决(或帮助您解决)您的问题。

http://php.net/manual/en/function.register-shutdown-function.php

答案 1 :(得分:1)

感谢您的帮助。我正在以正确的顺序做所有事情,但仍然没有写入会话数据。会话名称是必要的,因为有时我们使用相同的自定义CMS测试同一域上的许多站点。所以,最后,经过大量的测试而没有运气,我发现寄存器全局变量在这个服务器上是活跃的(我们从不使用它,代码写的当然是关闭了这个选项),但它与会话混乱!关闭这个做了很大的改变。没有更多的问题。我还在DB中创建了一个自定义会话处理程序,因此我可以更集中地跟踪问题。 结论:永远不要使用注册全局变量+命名会话,这是会话中的复杂数据。 无论如何,我会给这个问题更多的时间和更多的测试。 Ajax调用有时也太快了,我不得不放一个睡眠命令,所以写完会话数据真的完成了。谢谢

答案 2 :(得分:0)

我遇到了类似的问题,但是就在几年之后。 IE以自己的方式操纵标头,这会导致您可以在php.net档案中找到奇怪的php错误。

@Diego Pino Navarro,请参阅this help page并查找Safari及其与php的问题。

我还找到了"Safari "forget" http-authentication's logon-information"

答案 3 :(得分:0)

我不确定,但我认为可能没什么建议可能会有所帮助。

在刷新页面之前删除会话cookie以进行测试:)

确保您没有为任何数组分配包含管道符(|)的键。这将阻止会话数据被序列化和保存。

session_regenerate_id(true);很多情况下session_write_close似乎与session_regenerate_id无关。或者只是在session_write_close()之后执行session_start(),如果你依赖于SID;在你的情况下,我认为这是导致问题的原因,因为你每次都要结束当前会话而不是为下一页重新启动它。希望你明白我的意思。更多信息要确保数据实际刷新到浏览器,请使用ob_end_flush();

我无法理解

之间的联系
$_SESSION['data']['CMSeditores']=$retorno[1];   
$_SESSION['data']['CMScont']=$retorno[2];   

$nivelpermisos=$_SESSION['cms_logged_group'];
    $useractual=$_SESSION['cms_logged'];

我认为您需要粘贴更多代码,而数据部分导致问题而不是管理员登录部分。

我希望这会对你有所帮助。:)

答案 4 :(得分:0)

你有两次建立会话名称的原因吗?我以前遇到的问题是我会在没有名字的情况下建立会话,然后另一段脚本(不是我的)命名会话。即使在脚本结束时,我也能打印出会话变量,但是一旦我进入新页面,我的会话就被遗忘了。直到我将第二个脚本中包含的名称复制到我的会话调用中才解决它。

检查是否没有使用其他会话名称;也许,在第一次调用会话时,可能只尝试命名会话一次?

答案 5 :(得分:0)

问题:你是否在调试浏览器之前和任何变量分配之前首先调用session_start()...

听起来很傻,但试一试。

另外,为什么使用会话名称?真的没有必要,除非你有很多同名的会话变量用于不同的目的,如果是这样,那么你需要先修复它!