2010-12-20 90 views
4

私は典型的なログイン(ユーザ名、パスワード)を持っていて、「自分の詳細を保存する」チェックボックスも含めたいと思います。ログインフォームlogin_script.phpに値をポストし、ログインが成功した場合、ユーザーはサイトのメインページにリダイレクトされます。ログイン情報を保存するためのクッキーを設定するPHP

私は他のコードが実行される前にsetcookie("username",$username, time()+3600*24);は、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); 

} 

を保存するには、このメソッドを使用するために抱き合わせています。

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

アイデア? 乾杯。

+54

**本物のパスワードを料理に保存しないでください** – zerkms

+4

Nooooo!これをしないでください –

+0

パスワードに関する良いコメント! +1 – Beaker

答えて

7

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

あなたの問題については、周囲に道がありません。クッキーを設定する前に出力を全く必要としません。

解決策1:これを実現するには、2つの方法がありますログインページは常にあなたのログイン要求がクッキーを設定します(ログインが成功した場合)、常に、その後スクリプトに行く持って

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

解決方法2:スクリプトの先頭に出力バッファリング

スタートoutput buffering。ログインに成功したかどうかを確認したら、クッキーを最初にに設定してから、出力バッファリングをob_end_flushなどで停止します。

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

+0

私はいくつかの情報を与えてくれてありがとうと言っているだけではありません。 –

2

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

良いセキュリティポリシーは誰にも実際のパスワードを見せることを決して許しません。コードがそれを使っている場合を除いて。

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

  • ストアのセッションでパスワード
  • は長い時間

にセッションの有効期限を延長したりすることができます代わりに

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

しかし、それは実装が簡単だとセッション処理をPHPで行われるため、(あなたがセッション処理をオーバーライドしている場合を除き)私はいつも前者をお勧めします

+5

「セッションにパスワードを保存する」---セッションにパスワードを格納する理由は何ですか? 'user_id'で十分ではありませんか? – zerkms

+0

また、ファイルシステムやDBMS以外の永続ストレージを使用すると、2番目のケースが優れている可能性があります。 – zerkms

+0

本当にありがとうございました。私はまだ多くの側面に新しいです。 –

関連する問題