-1

先月はこれをたくさん読んでいて、色んなことを試したり、色んな意見を聞いたりしました。

このテーマについてはまったく無知ですが、PHPでカスタムセッションハンドラーの構築を開始し、すべてのページで検証スクリプトを実行して、$ _ SESSIONに保存されている次の条件が真であるかどうかを確認しました(すべてMD5でハッシュされます)。

1)最後のページで最後に使用されたものと等しいIP 2)最後のページで最後に使用されたものと等しいブラウザ

また、ログインで指定されたカスタムセッションタイムアウトがあり、たとえば5分間ログインしたままにすることができました。すべてのページでIDも再生成していました。

私は#phpircチャネルに入力しましたが、誰かがphpの事前定義された関数を複製してこれらすべてを実行しようとしたことに夢中になり、PHP変数(session.max_timeなど)を制限まで設定するように言われました。 、そしてそれで十分でしょう。

セットアップしましたが、一部のサーバー(localhostとwebserv)で機能し、他のサーバーはそれを無視しているようです。

私の先生は、データベースセッション検証を使用するように私に言いました。もう一度、ircの人々は、ページが読み込まれるたびに、その内容を検証するための接続を確立するだけで大​​量のメモリを浪費することに夢中になっていると私に電話しました。

さあ、私は本当に正しい選択が何であるか、何に従うべきかわかりません。

何かアドバイスはありますか?

4

3 に答える 3

1

IP アドレスが同じであることに依存しないでください。それはあなたのユーザーにとって制御不能です。

セッションをデータベースに保存する理由の 1 つは、すべてが同じデータベース サーバー (またはクラスター) を共有する複数の Web サーバーをサポートするためです。これにより、スケーリングが可能になります。また、PHP セッションの設定について心配する必要がなくなるため、多くのサードパーティ アプリケーションは、サポートを簡素化するためだけにこれを使用しています。

ほとんどの場合、デフォルトの Cookie ベース (サーバー上のファイルベース) のセッションで問題ありません。認証直後に regenerate_session_id() を使用してセッション固定を防止し、SSL を使用してセッション ハイジャックの他の手段を防止するようにしてください。

ユーザーがログインしたままにする必要がある場合は、通常どおりセッションを使用しますが、トークンを表す別の Cookie をセッションに追加します。

セッションが MD5 で暗号化されていると言っている意味がわかりません。多分あなたはさらに説明することができます。

于 2012-05-25T12:51:46.633 に答える
1

1) 最後のページで最後に使用されたものと等しい IP

これは、有効なシナリオ (負荷分散されたプロキシ経由のアクセスなど) では失敗します。

2) 最後のページで最後に使用されたブラウザと同じブラウザ

これは、有効なシナリオでは失敗します。Google Chrome は、セッションの途中であっても、オンザフライで更新されます。

私もすべてのページでIDを再生成していました。

これにより、ユーザーが複数のブラウザー インスタンスを開くと問題が発生します。ユーザーが存在しないセッション ID を提示した場合、または認証ステータスを変更した場合は、セッション ID を変更する必要があります。他の時ではありません。

これらすべての悪ふざけで何を達成しようとしているのかを言わないので、正しい解決策が何であるかをアドバイスすることは不可能です. これまでのところ、これはセッション ハンドラーについてではなく、セッションがどのように管理されるかについてです。

私の先生は、データベースセッション検証を使用するように私に言いました

なんで?おそらく、これはデフォルトのファイルベースのハンドラーよりも優先されますが、どのような短所に対処しようとしていますか?

于 2012-05-25T13:25:52.853 に答える
0

データベースにセッション処理を実装することをお勧めします。これは、サーバー設定に最も耐性があり、同時に比較的単純なソリューションであるためです。通常どおり php のセッション処理関数を使用しますが、ディスクではなくデータベースに保存します。少しグーグルで調べてみてください。 http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/

于 2012-05-25T12:52:23.090 に答える