0

セッションを使用してPHPでユーザー認証を処理する場合、正常にログインした後にユーザーのプロパティにアクセスするための2つの主なオプションが表示されます。

  1. ユーザーのメインプロパティをセッションスーパーグローバルにロードします
  2. ユーザーのUID(ユーザー名またはID番号など)のみをセッションにロードします。たとえば$_SESSION['username']、ページのロード時にユーザーのメインプロパティをフェッチし、これらをユーザーオブジェクトに保存します。

方法1

  • スコープは、セッションスーパーグローバルを介してより簡単にアクセスできます

方法2

  • 各ページでデータを取得するため、ユーザーのデータが変更されたときにセッション変数を更新することを心配する必要はありません。

私の質問

  • 私は他のオプションを見落としていますか?
  • 一般的に「完了」の方法は何ですか?
  • パフォーマンスはどうですか?どの方法がどのような状況でより速くなりますか?

ノート

  • ユーザーの「メイン」プロパティとは、ユーザーの名前、アクセスレベル、メールアドレスなど、多くのページで使用されるプロパティを指します。明らかに、大量のデータをロードすることはありません。

  • 私はデータベースに保存されたセッションを参照しており、ファイルベースではありません。

4

3 に答える 3

1

それはプロジェクトによって異なります。ユーザーの情報に最もアクセスしやすい場合は、セッションに入れます。私はそれをしたいと思います:

class User{
   private $userName;
   //ohter attrs
   //getters and setters    
}

function login(){
    $user = new User();
    //populate attrs 
    $_Session["user"] = $user
 }

大きなバッチデータをセッションに入れないでください。dbに残してください。UIDも入れないでください。いくつかのUserクラスオブジェクトを入れてください。

于 2012-09-30T19:45:22.273 に答える
1

通常、他のすべてのデータは動的に変更される可能性があるため、UIDまたはその他の一意の識別子(ユーザー名など)のみが保存されます。ただし、それはデータとプロジェクト自体に依存します。UIDに加えて、アクセスレベル、ユーザー名、電子メールなどの読み込みは、これらのデータが頻繁に使用され、それらの更新に本当に関心がある場合、非常に効率的である可能性があります。一方、各ページですべてのデータを要求する必要があるため、UIDを保存するだけでは非効率的ですが、より安全な方法です。とにかく、ほとんどのページでさらにユーザーデータをロードする必要がある場合は、とにかくデータを要求する必要があるため、このアプローチの方が適しています。それでも、たとえばデータベース要求の効率を上げるために、データベースキャッシュを使用できます。そうすると、両方の方法の効率がほぼ等しくなる可能性があります。要するに、

また、UID以外のユーザーデータを保存する場合、ユーザーは複数のセッションを開く可能性があるため、セッションIDも保存する必要があり、ユーザーデータを変更する場合は、必ず同じセッションを変更する必要があることに注意してください。

于 2012-09-30T19:48:29.430 に答える
1

パフォーマンスが心配な場合は、キャッシュレイヤー(memcacheなど)を実装し、プルしたユーザーデータをキャッシュに保存することを検討してください。私が通常行う方法は、データベースの代わりにmemcachedをセッションハンドラーとして使用することです。

于 2012-09-30T19:48:37.230 に答える