質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

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

Q&A

解決済

2回答

2520閲覧

自動ログインについて

earnest_gay

総合スコア615

PHP

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

0グッド

0クリップ

投稿2016/07/01 10:19

編集2016/07/01 11: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(); if($email_conf === $hitdata['email'] && password_verify($_COOKIE['passwordset'],$hitdata['password']) ){ $_SESSION['email'] = $email;//遷移先ページでも誰がログインしているか特定する為にアドレスはセッション保存 header('Location: login1.php'); } } else { $email_conf = ""; }

何が原因なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

とりあえず、いろいろなことはおいておいて、
if判定がきちんとtrueになっているかの確認はしてみましたか?

リダイレクトしてしまうと、わからなくなるので、そこはひとまずコメントにして確認してみてください。

例えば、以下のようにです。

PHP

1 if($email_conf === $hitdata['email'] && password_verify($_COOKIE['passwordset'],$hitdata['password']) ){ 2 $_SESSION['email'] = $email;//遷移先ページでも誰がログインしているか特定する為にアドレスはセッション保存 3echo "LOGIN!!!"; 4// header('Location: login1.php'); 5}

投稿2016/07/01 12:29

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/07/02 10:24

回答ありがとうございます。 確認もしてみます!
guest

0

ベストアンサー

クッキーの有無で処理したらセキュリティボロボロでしょ
クッキーで保持するのはセッションIDです
セッションIDがあればセッションが引き継がれるので
例えば$_SESSION["userid"]的なものをチェックして、
あればログイン画面をとばし、なければログイン画面にいくのが普通でしょ

投稿2016/07/01 12:05

yambejp

総合スコア114505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/07/02 10:23

>>クッキーの有無で処理したらセキュリティボロボロ これがよく分からないですが、セッションで判断すればいいのですね。 回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問