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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

3回答

343閲覧

ログアウト後にID・パスワードを取得し、自動的に入力している状態にする

earthMY

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

1クリップ

投稿2018/07/30 02:19

編集2018/07/30 02:40

イメージ説明

2回目の投稿です。

ローカル開発環境で簡単なログイン機能をサイトを参考にしながら作成しました。
上記の様なイメージでログアウトしても前の入力した値を取得し、
Sign In!ボタンを押すだけでログインできるような機能を作成したいです。
プログラマーとしてまだまだ駆け出しなので、何が必要かなども
よくわかっていません。

iphoneで上記の件を実行したいと考えてます。
ご教授のほどよろしくお願いいたします。

SingUp.php

PHP

1<?php 2 3function h($s){ 4 return htmlspecialchars($s, ENT_QUOTES, 'utf-8'); 5} 6 7session_start(); 8//ログイン済みの場合 9if (isset($_SESSION['EMAIL'])) { 10 echo 'ようこそ' . h($_SESSION['EMAIL']) . "さん<br>"; 11 echo "<a href='/logout.php'>ログアウトはこちら。</a>"; 12 exit; 13} 14 15 ?> 16 17<!DOCTYPE html> 18<html lang="ja"> 19 <head> 20 <meta charset="utf-8"> 21 <title>Login</title> 22 </head> 23 <body> 24 <h1>ようこそ、ログインしてください。</h1> 25 <form action="login.php" method="post"> 26 <label for="email">email</label> 27 <input type="email" name="email"> 28 <label for="password">password</label> 29 <input type="password" name="password"> 30 <button type="submit">Sign In!</button> 31 </form> 32 <h1>初めての方はこちら</h1> 33 <form action="signUp.php" method="post"> 34 <label for="email">email</label> 35 <input type="email" name="email"> 36 <label for="password">password</label> 37 <input type="password" name="password"> 38 <button type="submit">Sign Up!</button> 39 <p>※パスワードは半角英数字をそれぞれ1文字以上含んだ、8文字以上で設定してください。</p> 40 </form> 41 42<?php 43//データベースへ接続、テーブルがない場合は作成 44try { 45 $pdo = new PDO(DSN, DB_USER, DB_PASS); 46 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 47 $pdo->exec("create table if not exists userDeta( 48 id int not null auto_increment primary key, 49 email varchar(255), 50 password varchar(255), 51 created timestamp not null default current_timestamp 52 )"); 53} catch (Exception $e) { 54 echo $e->getMessage() . PHP_EOL; 55} 56//POSTのValidate。 57if (!$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 58 echo '入力された値が不正です。'; 59 return false; 60} 61//パスワードの正規表現 62if (preg_match('/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}+\z/i', $_POST['password'])) { 63 $password = password_hash($_POST['password'], PASSWORD_DEFAULT); 64} else { 65 echo 'パスワードは半角英数字をそれぞれ1文字以上含んだ8文字以上で設定してください。'; 66 return false;67} 68//登録処理 69try { 70 $stmt = $pdo->prepare("insert into userDeta(email, password) value(?, ?)"); 71 $stmt->execute([$email, $password]); 72 echo '登録完了'; 73} catch (\Exception $e) { 74 echo '登録済みのメールアドレスです。'; 75} 76 77?> 78 79 </body> 80</html> 81

login.php

php

1<?php 2 3session_start(); 4//POSTのvalidate 5if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 6 echo '入力された値が不正です。'; 7 return false; 8} 9//DB内でPOSTされたメールアドレスを検索 10try { 11 $pdo = new PDO(DSN, DB_USER, DB_PASS); 12 $stmt = $pdo->prepare('select * from userDeta where email = ?'); 13 $stmt->execute([$_POST['email']]); 14 $row = $stmt->fetch(PDO::FETCH_ASSOC); 15} catch (\Exception $e) { 16 echo $e->getMessage() . PHP_EOL; 17} 18//emailがDB内に存在しているか確認 19if (!isset($row['email'])) { 20 echo 'メールアドレス又はパスワードが間違っています。bbbb'; 21 return false; 22} 23//パスワード確認後sessionにメールアドレスを渡す 24if (password_verify($_POST['password'], $row['password'])) { 25 session_regenerate_id(true); //session_idを新しく生成し、置き換える 26 $_SESSION['EMAIL'] = $row['email']; 27 echo 'ログインしました'; 28} else { 29 echo 'メールアドレス又はパスワードが間違っています。aaaa'; 30 return false; 31} 32 33?>

logout.php

php

1<?php 2session_start(); 3 4if (isset($_SESSION["EMAIL"])) { 5 echo 'Logoutしました。'; 6} else { 7 echo 'SessionがTimeoutしました。'; 8} 9//セッション変数のクリア 10$_SESSION = array(); 11//セッションクッキーも削除 12if (ini_get("session.use_cookies")) { 13 $params = session_get_cookie_params(); 14 setcookie(session_name(), '', time() - 42000, 15 $params["path"], $params["domain"], 16 $params["secure"], $params["httponly"] 17 ); 18} 19//セッションクリア 20@session_destroy(); 21

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

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

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

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

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

guest

回答3

0

ベストアンサー

質問にあるコードと、質問内容に温度差がありますね^^;
コードのコンセプトから、php で質問内容を実現することはできません。
やるとしたら、JavaScript を使用して、ブラウザにログイン情報を記憶させる方法になると思います。

投稿2018/07/30 02:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

earthMY

2018/07/30 02:58

回答ありがとうございます。 Javascriptですか...わかりました、一度調べてみます。
退会済みユーザー

退会済みユーザー

2018/07/30 03:18

それよりも、今のコードの意味を考えてみたほうが良いかと。 生パスワードはできるだけ取り扱わないように作られているのですけど、コードのコンセプト、理解しています?
earthMY

2018/07/30 03:39

コードのコンセプト・・・ 簡易的なコードなので、セキュリティ面が無いとか そういった認識で合ってますでしょうか。
退会済みユーザー

退会済みユーザー

2018/07/30 03:42

生パスワードはできるだけ取り扱わない
earthMY

2018/07/30 03:48

調べてきました。 生パスワードだと、情報漏洩して大変な事になるので、 ハッシュ化という処理でパスワードを変換してから保存するのですね。 勉強になりました、ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/07/30 06:34

実装しようとしている機能は、何らかの形で「生パスワードまたはパスワードとして復号可能なデータ」を保持する必要があります。 最近の Web サービスではこれをリスクと捉えて、ブラウザのパスワード管理機能の利用を前提とるのが一般的です。ブラウザの機能であれば、ユーザの自己責任の範囲であり、サービスに責任を求められないからです。 *昔はよく見た「パスワードを保存する」チェックボックスを最近は見かけなくなったと思います。 このあたりのトレンドを見極めて、再度仕様を検討してみてください。
earthMY

2018/07/30 06:44

確かに「パスワードを保存する」最近見かけないですね。 長々とありがとうございました、一度検討し直したいと思います。
guest

0

そんなもん、webブラウザのパスワードマネージャーに仕事させたらいいんじゃないですかね。
(FirefoxやChromeなど、わりといい仕事してますよ?)

投稿2018/07/30 02:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

earthMY

2018/07/30 02:37

回答ありがとうございます。 パスワードマネージャー調べてきましたが、便利ですね。 勉強の一環としてphpとmysqlで実行したいので、 また別の機会で使用させていただきます。
退会済みユーザー

退会済みユーザー

2018/07/30 03:06

利用用途がないものを勉強したいの? セキュリティ0なのですが
earthMY

2018/07/30 03:08

利用用途はありますね、セキュリティに関しても勉強中です。
guest

0

ログイン時にユーザーを識別できる何かをcookieにセットしておいて、ログイン画面にアクセスしたときにそのcookieから情報を取得してフォームにセットすればokだと思います。

投稿2018/07/30 02:46

mayoi_maimai

総合スコア1583

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

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

earthMY

2018/07/30 02:56

回答ありがとうございます。 cookieはやっぱり必要なのですね、setcookieという文が 出てきたので、今からそれに関して勉強していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問