2012-03-11 9 views
1

私はクッキーに慣れていません(実際には一般的にはPHPです)。私が取り組んでいるウェブサイトのための「私を覚えてください」システムを実装したいと思います。ここや他のウェブサイトの多くの記事を読んだ後、私はパスワードやユーザーからの他の入力をクッキーに入れてはいけないことを理解します。 1つの解決策は、データベーステーブルのremember_keyというユーザーに対して、「remember me」チェックボックスをオンにしてユーザーがサインインするたびに再生成されることでした。また、ユーザーがページを再び訪問するとき、コードはremember_keyをdbから選択し、がremember_keyと同じであるかどうかを確認します(ユーザーがログインしている場合)。しかし、これを実装する方法がわかりません。私は思うようにいくつかのコードを書いていますが、私がすでに持っているものが正しいかどうか、またどのように進めるかを確認するのに役立つことができます。 (?またはその値):これは私が今持っているものであるクッキーを使用しているユーザーを記憶して検証する

function rememberUser($id) { 

    $remember = md5(uniqid(mt_rand(),true)); 
    $stmt = $mysqli->prepare("UPDATE USERS SET USER_REMEMBER_KEY = ? WHERE USER_ID = ?"); 
    $stmt->bind_param('si', $remember, $id); 
    $stmt->execute(); 
    setcookie("remember", $remember, time()+60*60*24*30, "/", "www.someName.com", false, true); 
} 

function isValidUser($id) { 

    $stmt = $mysqli->prepare("SELECT * FROM USERS WHERE USER_REMEMBER_KEY = ? AND USER_ID = ?"); 
    $stmt->bind_param('si', $_COOKIE['remember'], $id); 
    $stmt->execute(); 

    $stmt->store_result(); 
    $count = $stmt->num_rows; 

    if($count == 1) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

function forgetUser($id) { // not sure about this method at all! 

    setcookie("remember", '', time()-3600, "/", "www.someName.com", false, true); 

} 

forgetUser()​​を削除しますが、どのようにそれはその特定の人のためのクッキーであることを知っていますか?コメントや提案/ヒント/ヒントなど、私が今使っているコードと、それをどのように改良できるのかをお伝えしたいと思います。

私は既にセッションについて知っていますが、使いやすく、より安全です(私は推測します)が、FBのように長い時間ログインしておく必要があります。それ。私はセッションを長生きしても削除が保証されるとは聞きませんでした。

セキュリティについて:私のウェブサイトはスーパースーパーセキュアである必要はありません。このトークンで十分でしょうか?

+0

かなりよく考えられて見えます。 PHPセッション[PHP](http://www.php.net/manual/en/function.session-start.php)を使うこともできます。また、セッション固有のハッシュも保存されています。 – Bradmage

+0

しかし、私はすでにセッションが私のために十分に長い間、削除されていないまま滞在していると説明しています:) – Loolooii

+0

私はちょうど下部にあるテキストを見ていました、そしてそれを追加したばかりか、私の目を開いたままにする:)申し訳ありません。 – Bradmage

答えて

1

私はセキュアな部分にセッションを使用し、Cookieにハッシュまたはuser_idのいずれかを使用します。クッキーはあなたのサイトからしかアクセスできません。だから誰かが同じコンピュータにログインしていない限り、十分に有効期限がある場合、クッキーはただそこに座ります。次の週にサイトに戻ってクッキーを読んだら、データベースに保存されているuser_idまたはハッシュを使って(あなたのセッションのバージョンはどんなものか)開始するだけです。ハッシュが一致しない場合、ユーザーは再度ログインする必要があります。

私はそれがあなたの後だったことを願っています。

編集:

// I can't remember why right now, But I found to delete the cookie properly, 
// after setcookie, I had to unset the $_COOKIE also. 
setcookie("userid", "", time() - 3600); 
unset($_COOKIE['userid']); 
+0

実際にあなたが説明したことは、私がすでにクッキーについて知っていることです。私はクッキーがユーザーのPCとサーバー上のセッションに保存されていることを知っています。 3つ目の方法は、わからないことです。クッキーを削除するのは正しい方法ですか?ありがとう。 – Loolooii

+0

問題はありません。誰もが正しい答えを得られなかった場合、誰も怒らないわけではありません。 – Bradmage

関連する問題