2011-02-25 11 views
3

どちらが良いルートですか?SessionまたはQuery DBに各ページの負荷を格納しますか?

オブジェクトをセッションに保存してページ間で渡す必要がありますか、またはユーザーがWebアプリケーションの別のページに移行するたびにデータベースを照会する必要がありますか?

オブジェクトをセッションに格納する必要がある場合は、どうすればそれをやりますか?私はシリアライズとシリアル化でそれをやってみたが、それは私のために働いていない...

ありがとう!

編集:ここに私のコードの一部

Page 1: 
include "user.php"; 
session_start(); 
$user = new user(); 
$user->$username = "Jason"; 
$_SESSION["user"] = $user; 
header("Location: profile.php"); 

Page 2: 
include "user.php"; 
session_start(); 
$user = new user(); 
$user = $_SESSION["user"]; 
echo $user->$username; 

該当する結果はありません。

+0

このミステリーオブジェクトは何ですか? –

+0

プロジェクトのホストを検討してください。ロードバランシングを使用し、多数のヒットを取得する大規模なサーバーファームでホストされている場合は、とにかくデータベースにセッションを格納する方がよいでしょう。 –

+0

データベースにセッションを保存しても、データベースを照会する必要はありますか? – jasonaburton

答えて

8

ユーザー固有のセッションにのみデータを格納します。セッションをキャッシュとして使用しないでください。データが重複するために大量のディスク容量を消費するなど、悪いことが起こります。

ユーザー固有の場合は、合理的に小さく、頻繁に必要な場合にのみセッションに格納します(セッションでは10KB以上は保存しません)。あまりにも頻繁にそれを必要としない場合は、それを格納しないでください。

ユーザー固有のものでない場合は、キャッシュレイヤーを使用します。未加工のAPC/Memcachedを使用することもできますし、Cache_LiteZend_Cacheなどの抽象レイヤーを使用することもできます。

+0

たとえば、プロフィール情報をセッションに保存することはできますか?名前、年齢、性別、ユーザーネーム、メールアドレスなど。 – jasonaburton

+0

@jason:確か。ユーザーオブジェクトをセッションに格納するのは非常に一般的です。しかし、私はあまり保管しません。一部のテキストや小さなオブジェクトは問題ありませんが、私はその出版履歴を保存しません... – ircmaxell

+0

ああ私は出版の歴史全体を保存するつもりはありませんでした。さて、私の質問は、セッションにオブジェクトを保存する方法です。私はそれを研究し、オブジェクトを直列化してシリアル化する必要があると言われましたが、それは私のためには機能しませんでした。私は何が間違っているのか分からない。 – jasonaburton

1

私が言う:多くの場合、データが変更された場合

  • 、および各ユーザーは常に最新の値を持っている必要があり、あなたはおそらく日付場合は、データベース
  • から照会することをお勧めします変更されない、または変更がすぐに見られることする必要はありません。
    • データは、ユーザごとに異なる場合、あなたはセッションでそれを格納することができ(セッションごとのユーザーと同様に)
    • をした場合データは同じですすべてのユーザーが、あなたは(そのようAPC、またはmemcachedなど)別のキャッシングmecanism を使用する必要があり、セッションに保存する場合は重複


を避けるために、すべてのユーザーが共有する、あなたはシリアライズする必要があります/セッションのマカニズムによってすでに完了しています(一部のデータ型はシリアル化できません - Sessionsを参照)

(APC、memcachedの、ファイル、...)をキャッシュするために保存する場合は、それらのキャッシュmecanismsは、PHPのオブジェクトを格納する方法がわからないので、あなたは、多くの場合、/アンシリアライズシリアライズする必要があります。

+0

データはユーザーごとに異なります。その情報をセッションに保存するにはどうすればいいですか? – jasonaburton

関連する問題