4

I'm having problems with $_SESSION superglobal on AJAX request.

session_start() function is called before any session coding. Session ID is also the same in the calling code and the AJAX response code (tested by echoing session_id() in both scripts). AJAX PHP file is on the same domain. Everything should work as defined by standards, but when I do print_r($_SESSION) in the called AJAX script file I get Arrray( ) output.

I've hit the brick wall... I don't know why is this not working...

Checked both in Chrome and Firefox.

Any ideas?

UPDATE:

The problem is with $.ajax(...) request! When I do AJAX request it knows right session ID, and the session_start() function returns TRUE (successfully continued session) but then it resets my $_SESSSION superglobal! It empties it out... I don't know why yet...

Code:

index.php:

<?php

session_start();

$_SESSION['Test']='O.K.';

echo("SESSION_ID: " . session_id());
echo("SESSION_SIZE:" . sizeof($_SESSION));

?>

... Standard HTML stuff and jQuery include ...

<script>
    $.ajax(
    {
        type: "POST",
        url: "AJAXTest.php",
        data: null,
        success: function(sData) { alert(sData); }
    });

</script>

AJAXTest.php:

<?php

session_start();

echo("SESSION_ID: " . session_id());
echo("SESSION_SIZE:" . sizeof($_SESSION));

?>

index.php output:

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx
SESSION_SIZE: 1

Alert output:

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx (right session id)
SESSION_SIZE: 0

And after the AJAX call $_SESSION is empty. Across all other scripts with the same session... I'm baffled...

4

3 に答える 3

1

uがに値を入力しなかったことが原因である可能性があります$_SESSIONprint_r($_SESSION)

値を設定してみるとarray()が表示され、$_SESSION['user']='frankie'

その後print_r($_SESSION);
、$ _ SESSION配列にsession_id()が表示されることはありません。

于 2012-06-10T08:16:10.430 に答える
1

問題は私のカスタム php.ini ファイルにありました...セッションの重要な設定を明らかに台無しにしました(定義されていなくても->変更されていました)。

その結果、session_start() を呼び出すたびに $_SESSION スーパーグローバルがリセットされて空になりましたが、同じセッション ID が残ったままになり、私を混乱させ、間違った方向に投げました。すべてを骨の髄まで取り除くまで、エラーが私のコードにないことは明らかでした。

興味を持ってくださった皆様、ありがとうございます。

于 2012-06-11T06:34:06.710 に答える
1

AJAX ではなく、セッション自体に問題がある可能性があります。$_SESSION 配列とセッション ID をテストしているだけで、セッション ストレージ自体はテストしていません。いくつかの非 AJAX リクエストでセッション状態が同じかどうかを確認してください。たとえば、次のように使用します。

$_SESSION['Test' . time()]='O.K.';

これの代わりに:

$_SESSION['Test']='O.K.';

ページを更新すると、SESSION_SIZE カウントが増加するはずです。増えない場合は、php.ini のセッション保存パラメータが間違っているのではないでしょうか? たとえば、セッションをファイルに書き込む際の問題や、セッションに memcache を使用する場合の問題です。

また、ページと ajax 呼び出しの間に他の要求が行われていないことを確認してください。おそらく、呼び出されたスクリプトによって $_SESSION 配列がリセットされますか?

于 2012-06-10T13:09:47.397 に答える