小编Die*_*rro的帖子

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

我在调试这个特殊问题时遇到了一些麻烦,我希望有人知道我做错了什么.

我有一个自定义CMS系统工作,它使用Paragraph作为构建块,使用Ajax(prototypejs)调用和按预定顺序解析HTML块的函数进行更新,清理它们并将这些数据保存在Session变量的关联数组中.用户登录,会话已创建,我可以在我需要的每个页面中检查此会话而不会出现问题.该系统直接在最终网站上运行,因此用户可以实时查看他的更新并按照普通用户的方式浏览网站,但需要进行编辑.所以,这里没什么新鲜的.但这是奇怪的事情.

编辑模式下的最终用户站点(管理员用户已登录):路径"/"

验证记录状态后,函数处理可编辑内容并将关联数组保存到会话中,它还会启动一些javascript对象以编辑每个段落.数据实际上已保存,我可以使用外部脚本检查这个PHP脚本结束后是否存在.如果我加载新页面(新内容),会话更新新数据)

管理员用户使用Inplaceeditor修改段落,此HTML块通过Ajax发送到启动命名会话的php脚本,读取当前会话数据,检查是否应修改,附加或删除段落,并将值重新分配给现有数组键在$_SESSION.如果我在分配新数据之后创建了一个var_dump()o print_r.$_SESSION之后脚本回显处理过的html,ajax更新调用页面上的原始段落.

此脚本位于/admin/cms/...etc中,这意味着站点根目录中至少有4个目录.

当脚本结束时,我检查使用相同的会话转储脚本来查看数据是否真的被写入/提交,但是没有,$_SESSION只有来自调用页面的原始数据.相同的ID,相同的会话名称,相同session_start()但没有数据写入.这整个操作非常快,所以我可能会遇到速度问题,脚本会在session_write_close可以完成之前结束.

但是,如果我向$_SESSION数组添加一个新密钥并在其中放入一些数据,则会更新和写入数据.如果我没有在这个脚本上输出任何内容,只是处理数据和设置会话变量,它也会得到更新和编写.

就像$_SESSION数组的某些成员被阻止更新一样.

我做了什么来跟踪这个错误,我确定我没有做错.

  • 1.- register_globals当然没有了
  • 2.- session_name()并且session_start()始终以给定的
    顺序存在.我曾经
    session_start()在同一页面
    上使用多个-close 来使用多个命名会话,但为了改进问题,这不再是这样.
  • 3.-我session_write_close()在会话数据处理后使用.也
    试过没有,让php决定何时提交数据,但没有运气.
  • 4.-我只使用SID的cookie.
  • 5.-会话存储在/ tmp,我可以看到数据更新.
  • 我也尝试在DB上使用自定义保存处理程序,但同样的问题,
    "_write"仅在没有输出时才被调用.
  • 我搜索了这个主题的php.net,stackoverflow,谷歌等.我从不问过没有调查,这是我多年来的第一次......但它只是如此不合逻辑,它必须是一个没有想到的小事.

最奇怪的是,当我只处理没有输出的数据时,$_SESSION可以更新.但是如果我之后通过添加输出并再次尝试来修改此脚本,而不是仅仅显示新的(最后一个)值,我将获得原始值,即在第一个位置由调用页面创建的值,有时在玩了几个之后倍!PHP无法缓存脚本之间的值或?我没有全局化.

我真的很无能为力.这个系统在PHP4.3上运行完美,因为我使用5.3.3两个飞蛾我的用户在哪里调用数据混淆,所以我检查了,是的,有严重的问题.今天我更新到(5.3.6)并且我无法提交此会话值.

通过Ajax调用的脚本代码:

<?
session_cache_limiter('nocache'); 
session_name("CMS_ses");
session_start();
include('../htmLawed/htmLawed.php');
include("utils_cms.php");
include("../../../php/utils_array.php");

$value=$_POST['value'];
$editorId=$_POST['editorId'];
$clase=$_POST['clase'];
$editorId=str_replace("pre","",$editorId);
$value=html_entity_decode(stripslashes($value),ENT_QUOTES);
if (strlen(trim($value))==0)
    {
    die();
    }
$value="<div id=\"$editorId\"  class=\"$clase\">$value</div>";

$newXHTML=$value;
$retorno=CMS_nuevoBloque($newXHTML,$editorId);
$_SESSION['data']['CMSeditores']=$retorno[1];   
$_SESSION['data']['CMScont']=$retorno[2];   
session_write_close();

print_r($retorno[0]); //Offending …
Run Code Online (Sandbox Code Playgroud)

php ajax session session-variables

12
推荐指数
1
解决办法
2010
查看次数

标签 统计

ajax ×1

php ×1

session ×1

session-variables ×1