自動ログインについて - PHPプロ!Q&A掲示板

1488

  • 0P

自動ログインについて

質問日時 / 2008年9月8日 22:57    回答数 / 2件

Questioner:  agupx  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

php,mysqlで会員サイトを作っております。会員登録後にログインするのですが
その際に自動ログインを有効にするチェックボックスにチェックしてある場合
2回目以降からの自動ログインにしたいのですが方法がどうもわかりません。
通常のログインには成功しております。

session_set_cookie_paramsを使えばできそうな事を知り以下のように
してみたのですがチェックしている状態でログインしログアウトせずに
ブラウザを閉じ再度開くとログアウトしている状態になっています。

マニュアルを見ても意味が理解できなかったのですがチェックがある場合は、
1年間セッションを保持している状態になるのでしょうか?

print_r($_SESSION);で確認しましたがブラウザを再度開いた際には空になって
おりました。

根本的な流れがわかっていない状態なので・・・という感じなのですがわかりやすく
教えて頂けますと幸いです。

---html---
  1. <input type="checkbox" name="login_status[]" value="0" checked="checked" />次回から自動ログインを有効にする

---php---
  1. if ($_POST['login_status'] != '') {
  2.     session_set_cookie_params(365 * 24 * 3600);
  3. } else {
  4.     session_set_cookie_params(0);
  5. }
  6.  
  7. session_start();
  8.  
  9. // ここでもdbのデータと保持しているデータを照合しマッチすればログインに?
  10.  
  11. // ログインボタンを押したら
  12. if (isset($_POST['login'])) {
  13.     // エラーチェックなど
  14.  
  15.     if (エラーがなければ) {
  16.         // dbのデータとポストされたデータを照合しマッチすればログイン
  17.     }
  18.  
  19. }

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01weekendphpsession_set_cookie_paramsでは、 SessionIDを保存す
 ┗A01-1agupxお返事ありがとうございます。 質問前には流れなどさ

回答一覧

並び替え:

A01 満足
answererweekendphp [9月9日 01:06]

session_set_cookie_paramsでは、
SessionIDを保存するcookieの有効期限を設定できますが、
それはSession自体の有効期限ではないため、
希望の動作にはならないと思います。

自動ログインは、いくつかの実装方法があると思いますが、
一番よく使われる方法は、Cookieにログイン情報を保存する方法かと思います。

とても簡単な例ですが、ログイン時に、
  1. <?php
  2. //自動ログインがONなら。。。
  3.  
  4. // 自動ログイン用のKeyを生成
  5. $key = sha1( uniqid() . mt_rand() . time());
  6. $expire = time() + 3600 * 24 * 365;
  7.  
  8. // Cookieをセット
  9. setcookie("autoLoginKey"$key$expire"/"".example.com");
  10.  
  11. // Keyをサーバー側に保存(たとえばDBに)※実装する時にはエスケープとか必要
  12. $sql = "insert into autoLogin (userid, key, expire)"
  13.     . "values ('" . $userid . "', '" . $key . "', '" date("Y-m-d H:i:s"$expire) . "';";
  14. //    :
  15. //    :
  16. //    :

のように、保存しておいて、
次のアクセス以降、ログインチェックにて、
  1. <?php
  2. if (isset($_COOKIE["autoLoginKey"])) {
  3.     $sql = "SELECT userid FROM autoLogin"
  4.         . "WHERE key = '" . $_COOKIE["autoLoginKey"] . ""
  5.         . "AND expire > '" . date("Y-m-d H:i:s") . "';";
  6. //    :
  7. //    :
  8. //    :
  9. }
などとして照合すればいいかと思います。

もちろん、有効期限切れのレコードの削除や、
ログイン毎にkeyの書き換えなどはセキュリティ上、必要かと。

以上、参考まで

この意見に回答する

ツリーへ TOPへ

A01-1
replyeragupx [9月9日 18:04]

お返事ありがとうございます。
質問前には流れなどさっぱりわからなかったのですがアドバイス頂きました
ソースを参考に有効期限切れのレコードの削除や、ログイン毎にkeyの書き換え
まで実装することができました!

いつもズバリのアドバイスを頂き非常に参考になります。
本当にありがとうございました^^

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報