0

私はPHPで練習プロジェクトを行っており(フォーラムを作成しています)、ユーザーがログインしたままにするメカニズムを決定しようとしています.ユーザークラスを作成しました。これにより、ユーザーは(サインイン時に)認証されます.将来のユーザー アカウント関連の操作は、そのクラスを介して行われます (つまり、ユーザー関連の情報の取得、ユーザーが投稿/コメントを作成したときなど)。

ユーザーのログイン状態を維持するには、セッションを使用してユーザー オブジェクトをセッションに保存するのが最も簡単な方法のように思われました (セキュリティ上のリスクがあるため、Cookie ではありません)。特に大量のデータがシステムに保存されている場合は、システムに負荷がかかりません。

これに対する解決策を見つけようとした後、私は2つの選択肢を思いつきました:

  1. ユーザー ID のみをセッションに入れ、ユーザー ID を介して毎回ユーザー オブジェクトを作り直します。ただし、データベースは毎回再クエリを実行する必要があるため、これも不適切な実装のように思われます。

  2. セッションにユーザー ID を保存し (ユーザーが正常にログインしたら)、オブジェクト全体を Cookie に保存し、Cookie を使用する前に毎回、セッションのユーザー ID をセッションのユーザー ID と照合して Cookie を認証します。クッキー。Cookie がどのように機能するかはよくわかりませんが、いくつかの重要なユーザー情報がユーザー オブジェクト (つまり Cookie) に保存される可能性があるため、ここに何らかのセキュリティ リスクがありますか? クッキーが盗まれる可能性はありますか?

より良い別の選択肢はありますか?セッションや Cookie を使用する別の方法なのか、それともセッションや Cookie とはまったく異なる方法を使用するのか?

4

2 に答える 2

1

私は行くだろう:

  1. セッションにはユーザーIDのみを入れ、ユーザーIDを使用して毎回ユーザーオブジェクトを再作成します。ただし、データベースを毎回再クエリする必要があるため、これも悪い実装のように思われます。

MySQLクエリキャッシュをオンにすると、頻繁なクエリがはるかに高速になります。データが巨大であるかどうかはお勧めしません$_SESSION(ただし、このデータは実際にはどのくらいの大きさですか?)

于 2012-06-05T15:18:32.763 に答える
1

At the begining You should forget about 2. option. It's very dangerous to save critical data in cookie.

First Option is much better. You need to choose: data in $_SESSION or in database. If it's large object, you can serialize them and send into blob field in database. Or another idea: Save serialized data in file, then you can avoid additionel queries. But offcourse there is another problem: many IO file operations.

Think about this, test some options and then you should be able to choose best option for You.

于 2012-06-05T15:23:41.737 に答える