1

わかりました、これは非常に単純で他の場所では機能するため、私を悩ませ始めていますが、この現在のタスクでは機能しないので、ここに行きます!

セッション変数が設定されているか、特定の情報を表示しないかに依存するメイン ページがあります。このページがここにあるとしましょう: http://dev.example.com/some_page.php

if (isset($_SESSION["some_var"])) { /* it's set so do whatever */ }
else { /* not set so do whatever else.. */ }

jQuery $.ajax() によってトリガーされる ajax ページがあり、このセッション変数を呼び出して null に設定し、メイン ページのアクションを変更します。ここにあるとしましょう: http://dev.example.com/ajax/some_ajax_page .php

コードは次のようになります。

<?php
    if (!isset($_SESSION)) session_start();
    $_SESSION["some_var"] = null;

ajax がトリガーされた後にメイン ページがリロードされると、セッション var "some_var" はそのままですが、ajax ページの "null" の後にエコーされると、"null" に設定されます。

基本的に、グローバル セッションには書き込まれず、ローカル パスにのみ書き込まれるようです。

これは理にかなっていますか?

何か助けてください。また、何かについてもっと明確にしたい場合は、私に知らせてください!

4

5 に答える 5

1

このsession_start()関数は、PHPの構成で定義されているように、またはオプションで独自の保存ハンドラーを設定した場合は実行時に、セッションを作成して永続化する試みを処理します。こちらのドキュメントを必ずお読みください。

http://us2.php.net/manual/en/function.session-start.php

コードでは、セッション変数を保存またはアクセスするページの先頭で必ず呼び出す必要がsession_start()あります。したがって、上のページは次のようになります。

 <?php

 session_start();

 $_SESSION['myvar'] = 'some value';

次に、別のページでその値にアクセスしてみることができます。

 <?php

 session_start();

 if ($_SESSION['myvar'] == 'some value') {

   // do something

 }

それはうまくいくはずです。

于 2012-06-19T16:31:56.610 に答える
1

セッションのチェックを取り除きます。これが唯一のファイルである場合は、次のように呼び出します。

<?php
   session_start();
   $_SESSION["some_var"] = null;

また、リクエストごとにセッション ID を自動再生成するフレームワークを使用していますか? その場合、問題が発生する可能性があります。

操作する開発マシンとその権限がある場合は、/var/lib/php/session/ ディレクトリ内のすべてのセッションを手動で削除できます。サイトを使用するときに、セッション ファイルを 1 つだけ作成する必要があります。そのファイルを調べて、何がいつ書き込まれるかを確認することもできます。

于 2012-06-19T16:30:05.137 に答える
0

異なるセッション変数を使用しているようです。1つはAJAX呼び出し用で、もう1つは通常のページ呼び出し用です。これは、両方の呼び出しを同じ方法で初期化しない場合(または、セッションを初期化する同じ開始コードを使用する場合)に発生する可能性があります。必ず、同じsession_idを使用して両方の呼び出しをsession_start()してください。

// try in both calls
session_start();
echo session_id(); // must return the same id in both calls
于 2012-06-19T16:31:37.020 に答える
0

私が取り組んでいたアプリケーションには独自の session_handler があり、セッション データを要求する前にそれが含まれていなかった場合、同じ session_id であっても常に無効でした。

于 2012-06-19T21:39:58.820 に答える
0

unset を使用しないのはなぜですか。それはそれを行う適切な方法です。

于 2012-06-19T16:41:30.493 に答える