5

通常のログイン(ユーザー名、パスワード)があり、[詳細を保存する]チェックボックスも含めたいです。ログインフォームはその値をlogin_script.phpに投稿し、ログインが成功すると、ユーザーはサイトのメインページにリダイレクトされます。

この方法を使用してログインの詳細を保存しようとしています

//Remember Me Function

if(isset($_POST['remember_me'])){

    // Set a cookie that expires in 24 hours
    setcookie("username",$username, time()+3600*24);
    setcookie("password",$password, time()+3600*24);

}

私が理解していることからsetcookie("username",$username, time()+3600*24);、他のコードを実行する前に、PHPページの上部に設定する必要があります。

私の問題は、ユーザーが正常にログインしない限りCookieを設定したくないということです。ただし、ログインテスト後にスクリプトの途中でCookieの設定関数が呼び出されるため、機能しません。

何か案は?乾杯。

4

2 に答える 2

8

まず第一に:パスワードをCookieに保存しないでください!これはセキュリティ面で非常に悪い考えです。

あなたの問題に関しては:それを回避する方法はありません、あなたはあなたのクッキーを設定する前に全く出力を持っている必要はありません。これを実現するには、次の2つの方法があります。

解決策1:ログインページは常にリダイレクトします

ログイン要求をCookieを設定するスクリプトに移動させ(ログインが成功した場合)、常にユーザーを別のページにリダイレクトします(たとえば、ウェルカム画面、または失敗した場合はログインページに戻ります)。ログインスクリプトは出力を出力しないため、リダイレクトする前にCookieを設定できます。

解決策2:出力バッファリング

スクリプトの最初から出力バッファリングを開始します。ログインが成功したことを確認した後、最初にCookieを設定してから、のようなもので出力バッファリングを停止しますob_end_flush

個人的には、ソリューション#1はよりエレガントで機能的に優れていると思います。

于 2010-12-20T01:27:07.670 に答える
3

ユーザーがアクセスできる場所(クライアント側)にパスワードを保存することは非常に悪い習慣です。さらに悪いことに、パスワードを保存するときにパスワードをハッシュまたは暗号化していない(クライアントはパスワードを見ることができます!)

優れたセキュリティポリシーでは、実際のパスワードをだれにも見られないようにすることはできません。コードが動作している場合を除きます。

代わりにこれを行うことができます:

  • セッションにパスワードを保存する
  • セッションの有効期限をより長い時間に延長する

または、代わりに

  • パスワードをハッシュして暗号化する
  • ログイン情報をサーバー上のファイルに保存する
  • ファイルに一意の名前を付けます
  • 名前をCookieに保存する
  • 正しいファイル名のCookieを受け取るたびに、ファイルを検索してログイン情報を取得します。

ただし、実装が簡単で、セッション処理がPHPによって行われるため(セッション処理をオーバーライドしない限り)、常に前者をお勧めします。

于 2010-12-20T01:25:41.650 に答える