Home > PHP > [php]次回からは自動的にログインのサンプル

[php]次回からは自動的にログインのサンプル

パスワード認証ログインシステムのサンプルの続編。
ログイン画面にログインをスキップさせるチェックボックスが付いてることがありますが

コレを前に書いたソースに追加してみようっていう記事です。
名称は「次回からは自動的にログイン」とか「パスワードを記憶する」とかが一般的なのかな。
サンプルは前エントリーのセッション版を用いたものだけですが、Cookieでもやる事はそう変わらないです。

処理の流れは大体こんな感じ…

ログイン画面

「次回からは自動的にログイン」のチェックボックスはnameをmemory、valueをtrueに、
クッキーはnameをTEST_COOKIEとしています。

暗号化はmd5の他にsha1もあるよってことでsha1に変更してます。

login.php

PHP:
  1. <?php
  2. define("PASSWORD", "pass");
  3. $message = "";
  4.  
  5.  
  6. //クッキーの存在確認
  7. if(isset($_COOKIE["TEST_COOKIE"]) && $_COOKIE["TEST_COOKIE"] === sha1(PASSWORD)){
  8.    
  9.     $_SESSION["TEST"] = $_COOKIE["TEST_COOKIE"];
  10.     header("Location:admin.php");
  11.    
  12. }
  13.  
  14. if(isset($_POST["action"])&&$_POST["action"]==="login"){
  15.     if(PASSWORD === $_POST["password"]){//パスワード確認
  16.        
  17.         $_SESSION["TEST"] = sha1(PASSWORD);//暗号化してセッションに保存
  18.        
  19.         if(isset($_POST["memory"]) && $_POST["memory"]==="true"){//次回からは自動的にログイン
  20.             setcookie("TEST_COOKIE", $_SESSION["TEST"], time()+3600*24*14);//暗号化してクッキーに保存
  21.         }
  22.        
  23.         header("Location:admin.php");
  24.        
  25.     }else{
  26.         session_destroy();//セッション破棄
  27.         $message = "パスワードが違います";
  28.     }
  29. }
  30.  
  31. ?>
  32. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  33. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
  34. <head>
  35.     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  36.     <title>Login</title>
  37. </head>
  38. <body>
  39. <h1>Login</h1>
  40. <?php
  41.     if($message!=""){
  42.         print "<p class=\"message\">".$message."</p>\n";
  43.     }
  44. ?>
  45. <form action="" method="post">
  46. <p><input name="password" type="text" value="pass" /><input name="action" type="submit" value="login" /></p>
  47. <p><label><input type="checkbox" name="memory" value="true" />次回からは自動的にログイン</label></p>
  48. </form>
  49. </body>
  50. </html>

パスワードの確認が終わった後にチェックボックスがチェックされているか確認して、
チェックされていたらクッキーに暗号化したパスワードを保存する。

次に、ログイン画面にアクセスした時の為に、$_COOKIEを確認して
値がパスワードと一致したらセッションに保存してからページ遷移させる。

クッキーはsetcookieする時に期限を設定しておけば自動的に消えます。
上記の例だと期限は2週間になります。

管理画面

ログイン画面と同じく、アクセスした時用に$_COOKIEを確認して
値があったらセッションに保存する。

直ぐ下にセッションを確認するロジックがあるので、パスワードと一致しなければFALSEになる。
FALSEの場合にはlogin.phpへ遷移させるように変更してます。

admin.php

PHP:
  1. <?php
  2. define("PASSWORD", "pass");
  3. $message = "";
  4.  
  5.  
  6. if(isset($_COOKIE["TEST_COOKIE"]) && $_COOKIE["TEST_COOKIE"] != ""){
  7.    
  8.     $_SESSION["TEST"] = $_COOKIE["TEST_COOKIE"];
  9. }
  10.  
  11. if(isset($_SESSION["TEST"]) && $_SESSION["TEST"] != null && sha1(PASSWORD) === $_SESSION["TEST"]){
  12.     $message = "Login success";
  13. }else{
  14.     session_destroy();//セッション破棄
  15.     header("Location:login.php");
  16. }
  17.  
  18.  
  19. ?>
  20. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  21. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
  22. <head>
  23.     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  24.     <title>Admin</title>
  25. </head>
  26. <body>
  27. <h1>Admin</h1>
  28. <?php
  29.     if($message!=""){
  30.         print "<p class=\"message\">".$message."</p>\n";
  31.     }
  32. ?>
  33. </body>
  34. </html>

実際に使う時は暗号化したパスをまるっと保存させるのではなく、
さらに何かしら手を加えてから保存した方がいいと思う。

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Comments:4

ゆう 10-12-22 (水) 12:10

こんにちは。
ログイン機能を探していたところたどり着きました。
サンプル使わせていただいて大変助かってます!
これに、ログアウト機能ってつけられませんか?
$message = “Login success”; が表示される箇所に
ログアウトへのリンク?を付けられたらいいなと思っています。
追加してみようと試みたのですが、当方PHP知識ないため・・・。
ご教授いただければ幸いです!

Tenderfeel 10-12-22 (水) 15:37

ゆう さん >
元記事の方に追記しましたのでこちらをご覧ください。
http://tenderfeel.xsrv.jp/php/628/

ゆう 10-12-27 (月) 13:55

さっそくの対応ありがとうございます!
無事ログアウト機能もつけることができました!感謝です!

コーイチ 12-02-08 (水) 11:11

はじめまして
いつもサイトの情報を参考にさせて頂きphpの勉強中です。
”実際に使う時は暗号化したパスをまるっと保存させるのではなく、
さらに何かしら手を加えてから保存した方がいいと思う。”
とあるのですが、実際に公開するアプリケーションでは具体的にはどのような方法をとるのでしょうか?
このあたりを詳しく説明している情報にたどり着けず悩んでいます。
何か参考になる文献など情報があれば教えて頂けると嬉しいです。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://tenderfeel.xsrv.jp/php/890/trackback/
Listed below are links to weblogs that reference
[php]次回からは自動的にログインのサンプル from WebTecNote

Home > PHP > [php]次回からは自動的にログインのサンプル

最近の投稿
最近の修正
Tag Cloud
おすすめサーバー・他
メタ情報

Return to page top