1

$ _SESSIONを使用してユーザーIDを保存していましたが、ユーザーがブラウザーを閉じたときに認証された状態を維持できるように、SQLとペアになっている通常のCookie(KEY付き)を使用するように変更したいと思います。

SESSIONsテーブルの各行に一意のキーを作成するにはどうすればよいですか?

4

3 に答える 3

1

セッションCookieでのPHPのCookie有効期限の問題を回避するために、独自のセッションハンドラーを効果的に作成しようとしています。これは非常に簡単で、適切に実行されればかなり最適化されます。

ステップ1:セッションIDを生成する

セッションIDは一意です。ただし、永続的なセッションを計画している場合は、いくつかの点に注意する必要があります。接続の問題に関係なく、ブラウザごとにセッションを引き継ぐ必要があります。したがって、セッションIDをナビゲーターのユーザーエージェント(変更されない)にマッピングすることで、システムを少しごまかすことができます。

これにより、セッションIDジェネレーターが2人の異なる訪問者に対して同じIDを生成する可能性を減らすことができます。残りは乱数ジェネレーターとハッシュアルゴリズム次第ですmd5(microtime().$_SERVER['REMOTE_ADDR'])が、通常は信頼できる友達です。

ステップ2:データの保存と取得

データの保存も簡単です。目的は、セッションキー(に設定PRIMARY)とデータ(最も単純な形式のシリアル化された配列、として保存TEXT)の2つ以上の列を持つMySQLテーブルを作成することです。

セッションを作成するときは、新しい行を挿入してエラーを監視するだけです。エラーが発生した場合、そのキーはすでに使用されているため、別のキーを再生成する必要があります。行が正常に挿入された場合-すべて正常です。これで、ユーザーのセッション行ができました。そこから行う必要があるのは、適切と思われるこの行に対して読み取り/書き込みを行うことだけです。

セッションIDを使用してユーザーにCookieを送信すれば、完了です。

警告

  • ユーザーIDをセッションIDとして使用しないでください。クッキーは非常に簡単に操作できます。Cookieの値をランダムにし、ユーザーから完全に分離する必要があります。それは無意味なはずです。
  • 時々セッションテーブルをクリーンアップするためのクリーンアップコードを書く必要があります。これを行う良い方法は、セッションが最後に使用された日時を追跡し、それに応じて削除することです。
于 2012-11-17T21:36:58.480 に答える
-1

最良の方法は、いくつかのハッシュ関数を使用することです。これは、実際にはセッションIDを生成することによってPHP自体によっても使用されます。次のようなものを使用できます。

md5(microtime());

乱数、ユーザーエージェント、サーバー名など、より多くの値を組み合わせたり、SHA2などのより強力なアルゴリズムを使用したりできます。

ただし、一意性を保つために、そのようなハッシュがまだ保存されていない場合は、常にテーブルを調べる必要があります(ただし、もちろん確率は非常に低くなります)。

session_id()しかし、私はすべての仕事をする標準に行くでしょう。

于 2012-11-17T21:39:18.200 に答える
-1

MySQLを使用できますUUID()

セッションを存続させたい場合は、PHPを使用することもできますsession_set_cookie_params()

ただし、SQLソリューションには1つの利点があります。それは、より多くのWebサーバーに簡単に拡張できることです。一方、PHPの$_SESSION配列を使用することはできず、自分でセッション処理を作成する必要があります。

于 2012-11-17T21:47:03.813 に答える