質問編集履歴

2 具体化

kuzurotto

kuzurotto score 403

2016/07/01 20:17  投稿

自動ログインについて
Cookieがあれば自動ログインさせるために色々試しているのですが、
ブラウザを閉じて再度login.phpにアクセスするとちゃんと
<input type="email" name="email" id="email" value="<?php echo $email_conf; ?>"/ maxlength="255">
でCookieが生きていることが確認できます。
```ここに言語を入力
<?php
$dsn = 'mysql:dbname=test;host=localhost;charset=utf8';
$user = 'root';
$password = '';
$option = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$pdo = new PDO($dsn, $user, $password, $option);
$email = h(filter_input(INPUT_POST,email));
$password = h(filter_input(INPUT_POST,password));
$sql = "SELECT * FROM user_data WHERE email = ? ";//入力されたメールアドレスを基にレコード取得
$stmt = $pdo->prepare($sql);
$stmt->execute([
   $email,
   ]);
$hitdata =$stmt->fetch();
if(!empty($_POST['login'])){
   if(isset($email) && isset($password)) {
   //入力されたメールとDBのメールを比較&入力されたパスワードとDBのハッシュ化されたパスワードを比較
       if($email === $hitdata['email'] && password_verify($password,$hitdata['password']) ){
       $_SESSION['email'] = $email;//遷移先ページでも誰がログインしているか特定する為にアドレスはセッション保存
       header('Location: login1.php');
       } else {
           $messe = "ログインできませんでした";
       }
   }
}
//COOKIEのセット
if($_POST['save'] == 'on' ){
   setcookie('emailset',$_POST['email'], time() + 60 * 60 * 24 * 7 * 2);//秒 * 分 * 時間 * 日 *
   $messe = 'OK';
} else {
   setcookie('emailset', ' ');
   $messe = 'NG';
}
//COOKIE有無の判定
if (isset($_COOKIE['emailset'])) {
   $email_conf = $_COOKIE['emailset'];
} else {
   $email_conf = "";
}
?>
<form action="" method="post">
   <p>E-mail</p>
   <input type="email" name="email" id="email" value="<?php echo $email_conf; ?>"/ maxlength="255">
   <p>Password</p>
   <input type="password" name="password" id="password" value="" maxlength="255" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}" title="6文字以上で1文字以上の数字、小文字アルファベット、大文字アルファベットがそれぞれ含まれていること">
   <p><input type="checkbox" id="save" name="save" value="on" />次回からは自動的にログインする</p>
   <input type="submit" name="login" value="ログイン">
   <br />
   <?php echo $messe ?>
</form>
```
ということは、//COOKIE有無の判定、のtrueにページ遷移の記述をつけ足せば自動ログインができると思ったのですが、ブラウザを閉じて再度login.phpにアクセスするとページ遷移してくれません。
↓つけ足した。
```ここに言語を入力
//COOKIEのセット
if($_POST['save'] == 'on' ){
   setcookie('emailset',$_POST['email'], time() + 60 * 60 * 24 * 7 * 2);//秒 * 分 * 時間 * 日 *
   setcookie('passwordset',$_POST['password'], time() + 60 * 60 * 24 * 7 * 2);//秒 * 分 * 時間 * 日 *
   $messe = 'OK';
} else {
   setcookie('emailset', ' ');
   setcookie('passwordset', ' ');
   $messe = 'NG';
}
//COOKIE有無の判定
if (isset($_COOKIE['emailset'])) {
   $email_conf = $_COOKIE['emailset'];
   //COOKIEがあれば自動ログインする
   $sql = "SELECT * FROM user_data WHERE email = ? ";//COOKIEのメールアドレスを基にレコード取得
   $stmt = $pdo->prepare($sql);
   $stmt->execute([$email_conf,]);
   $hitdata =$stmt->fetch();
   var_dump(password_verify($_COOKIE['passwordset'],$hitdata['password']));
   if($email_conf === $hitdata['email'] && password_verify($password,$hitdata['password']) ){
   if($email_conf === $hitdata['email'] && password_verify($_COOKIE['passwordset'],$hitdata['password']) ){
       $_SESSION['email'] = $email;//遷移先ページでも誰がログインしているか特定する為にアドレスはセッション保存
       header('Location: login1.php');
   }
} else {
   $email_conf = "";
}
```
何が原因なのでしょうか?
  • PHP

    26085 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1 具体化

kuzurotto

kuzurotto score 403

2016/07/01 20:00  投稿

自動ログインについて
Cookieがあれば自動ログインさせるために色々試しているのですが、
ブラウザを閉じて再度login.phpにアクセスするとちゃんと
<input type="email" name="email" id="email" value="<?php echo $email_conf; ?>"/ maxlength="255">
でCookieが生きていることが確認できます。
```ここに言語を入力
<?php
$dsn = 'mysql:dbname=test;host=localhost;charset=utf8';
$user = 'root';
$password = '';
$option = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$pdo = new PDO($dsn, $user, $password, $option);
$email = h(filter_input(INPUT_POST,email));
$password = h(filter_input(INPUT_POST,password));
$sql = "SELECT * FROM user_data WHERE email = ? ";//入力されたメールアドレスを基にレコード取得
$stmt = $pdo->prepare($sql);
$stmt->execute([
   $email,
   ]);
$hitdata =$stmt->fetch();
if(!empty($_POST['login'])){
   if(isset($email) && isset($password)) {
   //入力されたメールとDBのメールを比較&入力されたパスワードとDBのハッシュ化されたパスワードを比較
       if($email === $hitdata['email'] && password_verify($password,$hitdata['password']) ){
       $_SESSION['email'] = $email;//遷移先ページでも誰がログインしているか特定する為にアドレスはセッション保存
       header('Location: login1.php');
       } else {
           $messe = "ログインできませんでした";
       }
   }
}
//COOKIEのセット
if($_POST['save'] == 'on' ){
   setcookie('emailset',$_POST['email'], time() + 60 * 60 * 24 * 7 * 2);//秒 * 分 * 時間 * 日 *
   $messe = 'OK';
} else {
   setcookie('emailset', ' ');
   $messe = 'NG';
}
//COOKIE有無の判定
if (isset($_COOKIE['emailset'])) {
   $email_conf = $_COOKIE['emailset'];
} else {
   $email_conf = "";
}
?>
<form action="" method="post">
   <p>E-mail</p>
   <input type="email" name="email" id="email" value="<?php echo $email_conf; ?>"/ maxlength="255">
   <p>Password</p>
   <input type="password" name="password" id="password" value="" maxlength="255" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}" title="6文字以上で1文字以上の数字、小文字アルファベット、大文字アルファベットがそれぞれ含まれていること">
   <p><input type="checkbox" id="save" name="save" value="on" />次回からは自動的にログインする</p>
   <input type="submit" name="login" value="ログイン">
   <br />
   <?php echo $messe ?>
</form>
```
ということは、//COOKIE有無の判定、のtrueにページ遷移の記述をつけ足せば自動ログインができると思ったのですが、ブラウザを閉じて再度login.phpにアクセスするとページ遷移してくれません。
↓つけ足した。
```ここに言語を入力
//COOKIEのセット  
if($_POST['save'] == 'on' ){  
   setcookie('emailset',$_POST['email'], time() + 60 * 60 * 24 * 7 * 2);//秒 * 分 * 時間 * 日 *  
   setcookie('passwordset',$_POST['password'], time() + 60 * 60 * 24 * 7 * 2);//秒 * 分 * 時間 * 日 *  
   $messe = 'OK';  
} else {  
   setcookie('emailset', ' ');  
   setcookie('passwordset', ' ');  
   $messe = 'NG';  
}  
 
//COOKIE有無の判定
if (isset($_COOKIE['emailset'])) {
   $email_conf = $_COOKIE['emailset'];
   //COOKIEがあれば自動ログインする
   $sql = "SELECT * FROM user_data WHERE email = ? ";//COOKIEのメールアドレスを基にレコード取得
   $stmt = $pdo->prepare($sql);
   $stmt->execute([$email_conf,]);
   $hitdata =$stmt->fetch();
   var_dump(password_verify($_COOKIE['passwordset'],$hitdata['password']));
   if($email_conf === $hitdata['email'] && password_verify($password,$hitdata['password']) ){
       $_SESSION['email'] = $email;//遷移先ページでも誰がログインしているか特定する為にアドレスはセッション保存
       header('Location: login1.php');
   }
} else {
   $email_conf = "";
}
 
```
何が原因なのでしょうか?
  • PHP

    26085 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る