5

私が見つけようとしているのは、複数のクライアントでセッション変数を共有できるかどうかです。まったく同じオブジェクトを使用できるように。以下の例は、私がやりたいことを示しています。

クライアント1:

start_session();
include('somelcass.php');
//some code...
$someobj = new someclass();
$_SESSION['myobject'] = serialize($someobj);
$id = sha1("somephrase");
set_session_var_for_other_users_by_id('myobject', $id);

クライアント2:

start_session();
include('somelcass.php');
$id = sha1("somephrase");
get_sessionvars_from_other_users($id);
$someobj = unserialize($_SESSION['myobject']);
//now use someobj from class someclass

そして私の追加の質問は、次のようなセッション拡張を使用することをお勧めしますか: sessionPsql

4

4 に答える 4

4

最初に最後の質問に答えます:

リンクしたSession PgSQL DocsはPostgreSQL Session Save Handlerです。これは、デフォルトのセッション保存ハンドラーの代わりに使用するように構成できるセッション保存ハンドラーですPHPのデフォルトのセッション保存ハンドラは、セッションをディスク ( files) に保存します。PostgreSQL セッションの保存ハンドラを使用すると、代わりに PostgreSQL データベースに保存されます ( pgsql)。

データベース内にセッションを保存することは、複数の Web サーバー (アプリケーションのスケーリング) からセッション ストアへのアクセスを許可する場合、または (おそらく) SQL クエリを使用してすべてのセッションにアクセスする場合に意味がありますが、通常は調整されたセッション保存ハンドラーが定義されています。それ (PgSQL セッション保存ハンドラー関数に基づく可能性があります)。

最初の質問に答えるには:

はい、関連するオブジェクトへの参照があり、それにアクセスする方法を知っている限り、そうすることができます。これは、セッション ストレージに手動でアクセスするか、セッションを単独で共有し、セッションを切り替えて他のセッション データにアクセスすることで実行できます。それはあなたのニーズに依存します。あなたの場合、セッションとは関係のない追加のテーブルにIDによって保存されているシリアル化されたデータにアクセスする方がおそらく簡単です。データが不要になった場合の処理​​方法を検討する必要があります。たとえば、一定時間使用しない場合はデータを削除します。最後に、実行可能な方法で独自のセッション実装を作成しています。バージョン 4 より前の PHP には、すぐに使用できるセッション サポートはありませんでした。現在のセッション サポートは非​​常に軽量であるため、より具体的なことを行う必要がある場合は、

したがって、複数のクライアントが同じセッションを使用する (セッションを共有する) ことができますが、これは実際には webapps を攻撃する方法でもあります (セッションハイジャック攻撃) が、「ハイジャック」がアプリケーションのデータフロー内で意図されている限り、何も表示されません。技術的に間違っています。PHP では、現在のセッションを閉じ、別のセッションを開き (セッションは名前ID で識別されます)、値を読み取り、別のセッションを閉じて、現在のセッションを再度開く必要があります。技術的には PHP で機能しますが、セッションの問題をデバッグするのは非常に難しいため、これを行う場合は堅実なコードを記述してください。

これは、 PHP のセッション機能のドキュメントを再利用する代わりに、複数のクライアント間で独自のオブジェクト共有メカニズムを作成する正当な理由にもなります。

于 2013-03-31T11:16:59.893 に答える