2011-11-17 12 views
5

PHPの異なるセッション間で共有オブジェクトを作成するには?PHPの異なるセッション間で共有オブジェクトを作成するには?

私はファイルまたはMySQLのメモリテーブルを使用することを考えています。ファイルの使用はロックされていないため、遅いです。 MySQLのメモリテーブルを使用するのは良い選択ですが、クラスインスタンス(オブジェクト)をテーブルに保存する方法はありますか?オブジェクトをシリアライズしてテーブルに配置するのも遅いです。

Option 1: MySQL memory table 
Option 2: shm_attach,shm_detach,shm_get_var,shm_has_var,shm_put_var,.. 
Option 3: Memcache 

問題は、MySQLメモリテーブルを使用してクエリが必要です。 Memcacheは、PHPの標準インストールには含まれていません。 Windows上でshm_ *関数を使用するには、ソースからオプション "--enable-sysvsem"を使ってPHPをビルドする必要があります。これは、php.iniで設定する必要があります。

上記のどちらが良いですか?その他のオプションは?

+1

共有メモリは1つのオプションです:http://php.net/manual/en/function.shm-get-var.php –

+2

どのようなデータについてお話していますか?この「オブジェクト」はどのように見えますか? – ManseUK

+0

マルチレベル構造(マルチレベルの配列に似ています)のクラスのインスタンスです – jondinham

答えて

1

異なるプロセス間でオブジェクト(クラスのインスタンス)を共有する場合は、使用するストレージレイヤの種類(データベース、memchace、ファイルなど)に関係なく、常にserializeunserializeにバインドされます。

serializeunserializeを使用しない場合は、できることはあまりありません。

+0

Marc Bは、PHPセマフォ関数shm_ *を使用することを提案しましたが、これを有効にするにはphp.exeに渡すパラメータが必要です。これは私のPC上ではできますが、私の共有ホスティングサーバーではできません。私は今かなり混乱しています – jondinham

+0

@JonDinham、あなたがファイルを使用しても、データを最初にシリアル化する必要がありますか? – Pacerier

1

私は、eyeOSの開発における解決策と同様の問題を覚えています。

私は、ファイルを使用することについて厳密には終了していませんが、xml形式で共有したい変数を保存する場合はどうでしょうか?

セッションごとに固有のトークン(ソートのパスワード)を使用して、トークンに基づいて正しいセッションXMLファイルに要求を送るコントローラーを設定することができます。

セキュリティのために、xml情報をphpファイルに保存し、正しいトークンを使用してPOSTによって情報を取得できるようにすることができます。

この方法では、共有セッションに安全にアクセス、編集、および削除(破棄)することができます。

1

Memcacheは標準的なPHPインストールではありません。 セマフォ&共有メモリ機能はWindowsではサポートされていません。

ほとんどの場合、唯一の解決策はオブジェクトメモリを使用してMySQLメモリテーブル を使用することです。

1

私は、APCが述べ表示されていない:マニュアルは、それが何をするかではなく、私はmemcacheのの代わりに参照他の記事内の任意の情報が欠けているとして、それは一つのセッション内だ

http://www.php.net/manual/en/book.apc.php

わからない場合。

私は、たくさん使われなければならないかもしれないページテンプレートを格納し、認証されたユーザーをphpセッション(私がそれほど確信していない)を使用する代わりにメモリテーブルに格納するというsimularなソリューションを探しています。

関連する問題