@Connorhd、助けてくれてありがとう!
まず、ユーザーを認証するために「app_authUser.php」にajaxリクエストを実行します。次に、[OK]の場合、サーバーからデータをロードするために「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']が正しく開始されています。2番目の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"を返します2番目のリクエスト:echo$idSessionは"h49pble06n7ao9pum06kt4dph0"を返します
Safariからのリクエスト:
最初のリクエスト:echo $idSessionは"2cbhin1185fm5ehvbb15k6n0b1"を返します2番目のリクエスト:echo$idSessionは"2cbhin1185fm5ehvbb15k6n0b1"を返します
つまり、最初の例ではセッションが同じではありません。なぜこれが起こるのですか?
アプリでforge.request.ajaxを使用していません。これが私のjavascriptのajaxコードです:
<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にアクセスしました!よくやった!「おもしろいもの」を見つけるのに最適な場所です!おめでとう!
手伝ってくれてどうもありがとう!!!
マルシオ・クルーム