@Connorhd,非常感谢您的帮助!
首先,我向“app_authUser.php”发出 ajax 请求来验证用户身份。然后,如果好的,我向“app_loadFeed.php”发出另一个 ajax 请求以从服务器加载数据。
在第一个 ajax 请求中,我在 post 参数中传递用户数据(登录名和密码)来验证数据库上的用户。我在 php 文件“app_authUser.php”上调用的第一个命令是“session_start()”,如下所示:
服务器端“app_authUser.php”的代码:
<?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”的代码:
<?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 编译器上运行的应用程序进行调用时,函数“session_id()”在两个 ajax 请求中返回不同的值,但当应用程序在 Sarari 上运行时返回相同的值:
例子:
来自 Trigger.io 的请求:第一个请求:echo $idSession 返回“m7dbsv7qqem92os39lv5ao2ta1” 第二个请求:echo $idSession 返回“h49pble06n7ao9pum06kt4dph0”
来自 Safari 的请求:
第一个请求:echo $idSession 返回“2cbhin1185fm5ehvbb15k6n0b1” 第二个请求:echo $idSession 返回“2cbhin1185fm5ehvbb15k6n0b1”
这意味着会话在第一个示例中不一样。为什么会这样?
我没有在我的应用程序中使用 forge.request.ajax。那是我的 ajax 代码,在我的 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 !很好!这是一个寻找“有趣的东西”的好地方!恭喜!
非常感谢你的帮助!!!
马西奥·克卢姆