* 自動ログイン [#bbba536e]
- 以下のページを参照のこと。
以下のページを参照のこと。
- http://blog.ohgaki.net/index.php/yohgaki/2006/05/12/

 if (authenticate($username, $password) && !empty($_POST['auto_login'])) {
     setup_auto_login();
 }
 if (empty($_POST['auto_login'])) {
     // 自動ログイン用のクッキーを削除
     delete_cookie('auto_login');
     // 古い自動ログインkeyを削除
     $sql = "delete from auto_login where key = '". sql_escape($_COOKIE['auto_login']). "';";
     sql_qeury($sql);
 }
 
 function setup_auto_login() {
     // 認証が完了し、自動ログインを設定
     $auto_login_key = sha1(uniqid().mt_rand(1,999999999)); // keyを生成
 
     $sql = "insert into auto_login (user_id, key, expire) values (" .
     "'". sql_escape($_SESSION['user_id']). "', '". esq_escape($auto_login_key)."', '". 
        date('Y-m-d H:i:s', time()+3600*24*7) ."';";
     sql_query($sql);
     send_cookie('auto_login', $key, 3600*24*7); //有効期限7日の自動ログインクッキーを送信
 }
ポイントとして、
- クッキーにはランダムな文字列のみ保存する。
- 手動ログイン成功時にランダムな文字列を生成し、サーバ側のDBとクライアント側のクッキーに同じものを保存する。
- ユーザが自動ログインを試みた場合、クッキーの文字列とDBの文字列を比較し、一致すればログイン成功、一致しなければログイン失敗となる。
- 自動ログイン(のチェックボックス)を外して手動ログインした時、もしくは手動ログアウト時は、サーバの文字列、クッキーの文字列を削除する。
- サーバのDBには文字列と一緒に日付を入れておき、適当なタイミングでExpireする。
とのこと。

 if (!is_authenticated() && !empty($_COOKIE['auto_login'])) {
     $sql = "select * from auto_login where key = '". sql_escape($_COOKIE['auto_login'])
         ."' and expire > '". date('Y:m:d H:i:s'). "';";
     $records = sql_select_and_fetch_all($sql);
     if ($records[0]['key'] === $_COOKIE['auto_login']) {
     // 認証OK。認証処理を行う
     // ......
     // 古い自動ログインkeyを削除
     $sql = "delete from auto_login where key = '". sql_escape($_COOKIE['auto_login']). "';";
     sql_qeury($sql);
     // 新しい自動ログインkeyを設定
     setup_auto_login();
  }
 }
ただし、ユーザ名はクッキーにそのまま入れておいてもいいような気がするが?

 if (!is_authenticated()) {
     // 通常のログイン処理
 }

 if (!empty($_COOKIE['auto_login'])) {
     // 自動ログイン用のクッキーを削除
     delete_cookie('auto_login');
     // 自動ログインkeyを削除
     $sql = "delete from auto_login where key = '". sql_escape($_COOKIE['auto_login']). "';";
     sql_qeury($sql);
 }
 //通常のログアウト処理


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS