首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Trigger.io PHP会话到期

Trigger.io PHP会话到期
EN

Stack Overflow用户
提问于 2012-11-03 05:57:53
回答 2查看 342关注 0票数 1

各位!

我正在尝试在Trigger.io中运行一个超文本标记语言应用程序。这个应用程序调用ajax从PHP页面加载一些数据。此时,我对用户进行身份验证并启动会话。在此之后,我必须调用另一个PHP页面。因此,我检查会话是否已启动,并发现该会话不再处于活动状态。第二个调用紧跟在第一个调用之后。

当我尝试使用Mac模拟器(我使用的是Trigger.io - OS Lion )从iOS ToolKit运行这个应用程序时,就会出现这种情况。当我在Safari中测试同一个应用程序时,它工作得很好:我的PHP服务器识别前面启动的会话,第二个页面由ajax加载。

有什么参数需要我设置吗?或者Trigger.io不支持PHP会话?

谢谢。

马西奥

EN

回答 2

Stack Overflow用户

发布于 2012-11-05 17:41:34

您应该使用forge.request.ajax(params)发出ajax请求,这是因为跨域限制,因为Forge应用程序是作为file:// urls加载到iOS上的。

forge.ajax.request采用类似于jQuery的$.ajax的输入,所以如果你想在网站和你的Forge应用中使用相同的代码,你可以很容易地在它们之间切换。

我们的文档中提供了更多文档:http://docs.trigger.io/en/v1.4/modules/request.html#ajax

票数 2
EN

Stack Overflow用户

发布于 2012-11-05 02:26:57

@Connorhd,非常感谢你的帮助!

首先,我向"app_authUser.php“发出一个ajax请求来验证用户身份。然后,如果Ok,我向"app_loadFeed.php“发出另一个ajax请求,以便从服务器加载数据。

在第一个ajax请求中,我在post参数中传递了用户数据(登录和密码),以便在数据库上对用户进行身份验证。我在php文件"app_authUser.php“上调用的第一个命令是"session_start()",如下所示:

服务器端"app_authUser.php“的代码:

代码语言:javascript
复制
<?php
    session_start();

    // Just for test;
    $idSession = session_id(); 
    echo $idSession;

    /*
     Test user authenticate. If ok, then I assign idUser to $_SESSION['idUser'] variable.
    */

    if( $loginOk == true ){
        $_SESSION[ 'idUser' ] = $User->idUser;
    }
?>    

在上面的代码中,用户已通过身份验证,并且$_SESSION‘’idUser‘已正确启动。在第二个ajax请求中,我测试是否设置了变量$_SESSION 'idUser‘。这就是重点:它不再是设置的。同样,我首先调用"session_start()“:

服务器端"app_loadFeed.php“的代码:

代码语言:javascript
复制
<?php
    session_start();

    // Just for test;
    $idSession = session_id(); 
    echo $idSession;

    if( isset( $_SESSION[ 'idUser' ] ) ){
        /* Load data from database to return to user.... */
        echo ...
    }
    else{
        echo '0';
    }
?>

当我从Trigger.io编译器调用我的应用程序时,上面的测试总是返回false。但是,当我从Safari调用我的应用程序时,它总是返回true。

我发现,当从运行在Trigger.io编译器上的app进行调用时,函数"session_id()“在两个ajax请求中返回不同的值,但当app在Sarari上运行时返回相同的值:

示例:

来自Trigger.io的

  • 请求:第一个请求: echo $idSession返回"m7dbsv7qqem92os39lv5ao2ta1“第二个请求: echo $idSession从Safari返回"h49pble06n7ao9pum06kt4dph0"
  • Requests:

第一个请求: echo $idSession返回"2cbhin1185fm5ehvbb15k6n0b1“第二个请求: echo $idSession返回"2cbhin1185fm5ehvbb15k6n0b1"

这意味着会话在第一个示例中是不同的。这一切为什么要发生?

我没有在我的应用中使用forge.request.ajax。这是我的ajax代码,在我的javascript中:

代码语言:javascript
复制
<script>

function openAjax()
{
    try
    {
        var ajax = new XMLHttpRequest();
    }
    catch(e)
    {
        try
        {
            var ajax = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(ee)
        {
            try
            {
                var ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(eee)
            {
                var ajax = false;
                alert("Seu navegador não suporta AJAX!")
            }
        }
    }   
    return ajax;
}

// This is the function called at second time, just after I authenticate my user and have session opened.
function loadFeed(){
    var url = CT_URLBase + 'app_loadFeed.php'; // CT_URLBase = 'http://192.168.1.100/' in my local environment.
    var parameters = '';

    var ajax = openAjax();

    ajax.open('POST', url, true);
    ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=iso-8859-1');

    ajax.onreadystatechange = function(){

        if (ajax.readyState == 4){

            if (ajax.status == 200){

                var retorno = ajax.responseText;

                if( retorno != '0' ){

                    /* Return OK!!! */

                }
                else{

                    /* Error: return is 0 (zero), that means session is not started.

                }
            }
        }
    }

    ajax.send(parameters);

}    

</script>

最让我产生误解的是,同样的代码在Safari中可以完美地工作,但在Trigger.io中却不能。

顺便说一下,我访问了你的网站,connorhd.co.uk!干得好!这是一个寻找“有趣的东西”的好地方!祝贺你!

非常感谢您的帮助!

马西奥·克劳姆

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13203588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档