2011-08-11 29 views
0

私はPHPとMySQLを使用しています。 site_url、site_path、contact_email、default_timezone ...など、私が各ページで必要とするいくつかのサイト構成変数があります。セッションを使用してサイト構成を保存するのは、安全で安全な方法ですか?

すべてのページの更新時にこれらの値をデータベースから取得するのではなく、最初のページ訪問時にセッションに保存しました。

私はしばらくこの方法を使用していましたが、問題は発生していません。私が今見ている唯一の欠点は、値が変更された場合、ブラウザを閉じてセッションをクリアしてからリロードする必要があることです。 (しかし、これらの値は非常に静的です)

これは問題ありませんか?これは他の問題を引き起こすでしょうか?

また、どのくらいの情報をセッションに保存できますか?限界はありますか?

答えて

1

これらは、すべてのユーザーに共通のグローバル値のようなものです。それはセッション価値のための貧弱な候補者です。それらをどこかのファイルに格納する方が良いでしょう。それぞれが同じ値であれば、50,000セッションの「site_url」を格納する必要はありません。時間と空間の浪費。

セッション記憶域は、複数のユーザー間で共有されない/共有できないユーザー単位のデータに対して、排他的に使用する必要があります。

ディスクの空き容量、PHPのmemory_limit、サイトのヒットごとに複数メガバイトのデータを解析するのに費やすCPU使用量以外は、セッションストレージには実際的な制限はありません。

0

あなたがセッションに保存することができますどのくらいで制限はありませんが、メモリのPHPはこれは、あなたが期待するどのように多くのユーザーに依存http://ca.php.net/manual/en/ini.core.php#ini.memory-limit

+0

リストアは、Webサーバーの 'temp'ディレクトリ(デフォルトのセッションハンドラを使用する場合)またはデータベースフィールドのサイズ(セッションデータをデータベースに格納するカスタムセッションハンドラを使用する場合) – Mchl

0

を使用することができますどのくらいの制限があります。一度に数十を超える数で、この情報をセッションデータに格納するのは良い考えではありません。

この場合、セッションは実際にはキャッシュとして機能しません。問題は、セッションが1万回ある場合、セッションデータを1万回複製する必要があるということです。これは効率的ではありません。

プロジェクトのサイズであれば、memcached(またはAPCキャッシュ)のようなものを使用して、キャッシュされた値を一定期間保存する方がよいでしょう。データベースクラスを使用して設定を処理する場合は、キャッシュからDBクラスをフェッチして、コードを呼び出すすべての場所で実装を心配することなく実行できます。キャッシュメカニズムとしてファイルを使用しようとすることはできますが、その場合はキャッシュタイムアウトとファイルアクセスが心配です。決定を下す前に測定してください。

関連する問題