1

セッションを手動で明示的に設定および設定解除できることは知っていますが、これは質問する価値があると思います。C#には、最初のリクエストまでデータを保存するTempDataという辞書があります。つまり、TempDataが呼び出されると、自動的に設定が解除されます。理解を深めるために、ここに例を示します。

Controller1.cs:

TempData["data"] = "This is a stored data";

Model1.cs:

string dst1 = TempData["data"]; // This is a stored data
string dst2 = TempData["data"]; // This string will be empty, if an exception is not raised (I can't remember well if an exception is raised)

つまり、基本的には、これは1回だけのセッションのようなものです。繰り返しになりますが、phpで明示的に設定および設定解除できることは知っていますが、それでもphpにはこのような機能がありますか?

4

3 に答える 3

6

他の人が指摘しているように、TempDataを有効にするためにセッションを使用します。簡単なPHPの実装は次のとおりです。

class TempData {
    public static function get($offset) {
        $value = $_SESSION[$offset];
        unset($_SESSION[$offset]);
        return $value;
    }

    public static function set($offset, $value) {
        $_SESSION[$offset] = $value;
    }
}

テスト:

TempData::set("hello", "world");
var_dump($_SESSION); // array(1) { ["hello"]=> string(5) "world" }

TempData::get("hello"); // => world
var_dump($_SESSION); // array(0) { } 

残念ながら、静的クラスを使用してArrayAccessを実装することはできません。

于 2011-09-22T12:09:54.720 に答える
2

PHPにはありませんが、自分で実装するのはそれほど難しいことではありません。実際の実装は、正確なニーズによって異なります。

  • そのデータはユーザー間で必要ですか、それともユーザーごとに分けて必要ですか?
  • デフォルトの有効期限を設定しますか?
  • アクティブなリクエストだけにそれを入れたいですか、それとも誰かがそれを取得するまでそれを持続させるべきですか?
  • 「ミス」は許容されますか(memcachedを参照)、または要求したときにデータを確実に見つけたいですか?
于 2011-09-22T11:48:59.867 に答える
1

@AVDが言うように、そのようなコマンドはありません。そして、私は本当に理由がわかりません。TempDataの特徴は、サーバーへのラウンドトリップ用にいくつかの値/オブジェクトを保存できることです。

WebサイトでSessionsを使用する場合、これらの値を格納するためにSessionを使用しないことには問題はありません。セッションストレージはサーバーに配置され、ユーザーは毎回サーバーに送信されるセッションIDによって識別されます。

私が見ることができる唯一のパフォーマンスのペナルティは、httpハンドラーを実行しているプロセスの外部でセッションストレージを実行した場合です。それ以外の場合は、両方ともメモリ内にあり、かなり高速である必要があります。

于 2011-09-22T11:51:08.450 に答える