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(); if($email_conf === $hitdata['email'] && password_verify($_COOKIE['passwordset'],$hitdata['password']) ){ $_SESSION['email'] = $email;//遷移先ページでも誰がログインしているか特定する為にアドレスはセッション保存 header('Location: login1.php'); } } else { $email_conf = ""; }
何が原因なのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/02 10:24