0

PHPでサイトを開発しています。ユーザー セッションが開始すると、$_SESSION 変数にすべてのデータベース行をロードします。ユーザーが db 値を変更すると、$_SESSION var も更新します。

問題は、同じユーザーに対して複数のセッションがアクティブになっている場合に発生します。データベースを過負荷にすることなく、同じユーザーのすべてのセッションのデータを更新する方法はありますか? または、代わりに、同じユーザーに属するすべてのセッションに同じセッション ファイルを使用するように php を強制する方法はありますか? または、セッションが継続するたびにデータベースにクエリを実行する必要がありますか?

もう 1 つのジレンマは、それだけの価値があるかどうかです。つまり、このメカニズムがサーバーの負荷をどれだけ軽減できるかはわかりません。また、このメカニズムがファイルベースのセッションに適用できるかどうか、または別のセッション格納タイプを使用する必要があるかどうかもわかりません。

この質問は、私のこの他の質問に多少関連しています(これに対する回避策が単にすべてのセッションファイルを削除することであっても)。

4

2 に答える 2

1

なぜ $_SESSION に多くのデータが必要なのかという疑問に本当に到達します。また、どのデータを頻繁に表示する必要があるかを判断するには、時間をかけて判断する必要があります。

ほとんどの場合user_id、必要なデータをデータベースから直接取得するために、ユーザーのログイン状態を維持するセッション識別子のみが必要です。

ユーザーが自分のアバターを変更でき、このアバターを表示するためにそれほど多くの場所に移動していないと仮定すると、それをセッションに保存したりSELECT、同時に保存したりする必要はありません。たとえばSELECTS、アバター$_SESSION['user_id']が別のユーザーに個人的なメッセージを送信しようとしたときに使用するトリガー ページを作成できます。それ以外の場合は、ユーザー アバターを選択するクエリを 1 時間に 1 回以上実行しない場所にキャッシュを配置できます (つまり、memcached を使用)。

ユーザーがメールを変更しても、同じです。他の誰かが彼にメッセージを送信しようとすると、SELECT クエリがトリガーされます。それ以外の場合は、キャッシュが設定されます。

たとえば、ユーザーが自分のアバター、電子メール、その他の些細な情報を変更してから、インデックス ページにアクセスしたとします。彼のセッションでは、識別子のみをロードします。データベースにはレコードが存在しますが、まだ選択されていません。したがって、セッションが軽いためサーバーの負荷も、SELECTクエリが送信されないためデータベースの負荷もありません。

ユーザーが何回セッションを設定しようとしても (この場合は 2 回目のログ)、データベースには現在のデータがあり、セッションは識別子のみです。彼のすべてのインスタンスを特定できますが、必要のないデータは使用しないでください。

于 2013-09-23T10:00:04.223 に答える