我有一些严重的问题调试这个特殊的问题,我希望有人有一个线索,我做错了什么.

我有一个自定义CMS系统工作,使用段落作为构建块,使用Ajax(prototypejs)调用和功能,以给定的顺序解析HTML块,清理它们并将该数据保存在会话变量中的关联数组中.
用户登录,会话被创建,我可以检查这个会话没有问题在我需要的每一个页面.该系统直接在确定的网站上工作,所以用户可以实时查看他的更新,并按普通用户浏览网站,但可以编辑.
所以,没有什么新的.但这是奇怪的事情.

Enduser站点在编辑模式(admin用户登录):路径“/”

在记录状态被验证之后,一个函数处理可编辑的内容并将关联数组保存到会话中,它还启动一些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() – 在同一页面上关闭
使用几个命名的会话,但是
改进这个不再是这个问题
所以.
> 3.-会话数据处理后,我使用session_write_close().也
尝试没有,让PHP决定
何时提交数据,但没有运气.
> 4.-我只使用cookies的SID.
> 5.-会话存储在/ tmp中,我可以看到更新的数据.
>我也试过使用自定义保存
处理程序在DB上,但同样的问题,
“_write”只有当没有输出作为存在时才调用.
>我搜索PHP.net,stackoverflow,谷歌等为此主题.我从来没有经过调查就问过,这是我多年来的第一次,但它只是这么非常的不可思议的,

最奇怪的是,当我只是处理数据而不输出$_SESSION得到更新好的.但是,如果我以后通过添加输出来修改这个脚本,再试一次,而不是仅仅提供新的(最后)值,我会得到原来的值,首先由调用页面创建的值,有时候在几个倍! PHP不能在脚本之间缓存值,还是没有globlals.

我真的很无知这个系统在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 part...without everything works
?>

真的没什么奇怪的这里….主页代码更简单,没有奇怪的PHP指令等

这是呼叫者页面的标题

include 'PHP/db.PHP';
$len=$_GET['len'];
$sec=$_GET['sec'];
$cont=$_GET['cont'];
$admfin=$_GET['admfin'];
$fecha=$_GET['fecha'];
$token=$_GET['token'];
$cur=$_GET['cur'];

$PHP_SELF=$_SERVER['PHP_SELF'];
session_cache_limiter('nocache');
session_name("CMS_ses");
session_start();

$passvar='';
unset($adm);
if ((!empty($_SESSION['cms_logged'])) and (!isset($admfin)) )
    {
    $nivelpermisos=$_SESSION['cms_logged_group'];
    $useractual=$_SESSION['cms_logged'];
    $adm=1;

    }
elseif (empty($_SESSION['cms_logged']))
    {
    unset($useractual);
    }
    //.........rest of the code

更新:我做了深夜测试,发现有些我不明白.请问:
它不仅与Sessions有关,还与MysqL Querys有关.相同的代码,而不是尝试写入$_SESSION数组,我使用session_id对Innodb表进行了简单的更新.当我输出一些代码,更新确实执行,(我可以输出查询字符串,没有MysqL_error()或通知)问题,但检查数据库该行没有更新.如果脚本和Query得到提交,输出.只有常见的事情是会话开始并输出.

我重新启动了Apache等(谁知道),但没有运气.然后我做了一些非常愚蠢的事情,因为这是一个服务器端的事情.我将浏览器更改为Firefox(使用safari),一切正常!好的,重新检查,回到野生动物园,没有任何作用.两者并肩运行,同样的问题. PHP是服务器端,不同浏览器如何处理代码不同,浏览器可以对apache回滚,请求没有处理或者调用相同的脚本两次,而不通知(检查safaris开发者控制台,脚本只调用一次)?可以safari重新提交数据,因为它“认为”ajax失败?我使用firebug和Safaris开发工具检查标题,没有什么奇怪的,但是当我用safari进行Ajax调用时,调用者页面重新加载数据(Aka conection to server …).

我真的不明白什么

我有一个类似的问题(如果我已经正确理解).脚本运行完毕后,我需要强制会话数据(用于自定义会话驱动程序).可以注册一个关机功能,该功能在脚本完成后运行.

也许这将解决(或帮助你解决)你的问题.

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

PHP会话未写入输出(echo或print_r在外部ajax调用)的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. iOS Swift上弃用后Twitter.sharedInstance().session()?. userName的替代方案

    解决方法如果您仍在寻找解决方案,请参阅以下内容:

  3. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  4. ios – 如何从Apple Watch调用iPhone上定义的方法

    有没有办法从Watchkit扩展中调用iPhone上的类中定义的方法?根据我的理解,目前在Watchkit和iPhone之间进行本地通信的方法之一是使用NSUserDefaults,但还有其他方法吗?

  5. ios – 如何将视频从AVAssetExportSession保存到相机胶卷?

    在此先感谢您的帮助.解决方法只需使用session.outputURL=…

  6. ios – 使用AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto拉伸捕获的照片

    解决方法所以我解决了我的问题.这是我现在使用的代码,它工作正常:…重要的输出imagaView:一些额外的信息:相机图层必须是全屏,并且outputimageView也必须是.我希望这些对某些人来说也是有用的信息.

  7. 我可以在iOS中自定义Twitter工具包的登录按钮吗?

    我已经下载了Twitter工具包框架并添加了用Twitter登录的代码.但是,我不希望登录按钮看起来像那样.我想要一个用于登录的自定义按钮.我能这样做吗?我只想使用这个框架,因为这也适用于iOS系统帐户.解决方法根据document:在按下按钮中添加代码:Objective-C的迅速

  8. ios – AVCaptureSession条形码扫描

    解决方法以下是我所拥有的项目代码示例,可以帮助您走上正确的轨道

  9. ios – 如何在Watch OS 2中引用不支持的框架

    有没有办法将框架链接到扩展名?

  10. ios7 – 在iOS 7中设置Alamofire中的自定义HTTP标头不工作

    解决方法我得到它的工作这对iOS7没有影响:然而,这将适用于iOS7和8:

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部