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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

1回答

4113閲覧

戻るボタンでセッションを解除するには

dog57

総合スコア131

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

1クリップ

投稿2018/02/24 10:34

編集2018/02/24 10:35

TOP画面→アカウント編集→確認画面→編集完了
を作成しています。

アカウント編集画面で編集した時に、戻るボタンでTOPページに戻る時(アカウント編集→TOP画面)には
フォームで編集された内容がセッションに格納されずに元のデータのまま戻れるのですが

確認画面→アカウント編集→TOP画面の順に戻っていったときに
確認画面で編集内容を保持したままTOP画面に戻っていってしまうため下記の画像のようになってしまいます。

・アカウント編集→TOP画面
イメージ説明

・確認画面→アカウント編集→TOP画面
イメージ説明

原因は確認画面でアカウント編集で編集した内容を格納しているためですが、
確認画面→アカウント編集→TOP画面 で遷移してきた時に
そうしたら元のデータのまま表示させることができますか?

login_admin.php TOP画面

php

1<?php 2// 開発時にこれを書かないのはNG 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6session_start(); 7header("Content-type: text/html; charset=utf-8"); 8 9require_once('./functions.php'); 10require_once('../config/db.php'); 11 12// ログインしていなければ login_form.php へ遷移 13require_logined_session(); 14 15 16 17// クッキーの設定、同じユーザーが再度ログインする際のE-メール、パスワードを記入する手間を省く 18setcookie("email", $_SESSION["email"], time() + 30); 19setcookie("password", $_SESSION["password"], time() + 30); 20 21 22 23// 結果の取得 24$country = array(); 25 26foreach ($statement as $row) { 27 28 $country[] = $row; 29 $_SESSION['rank'] = $row['rank']; 30 $_SESSION['nation'] = $row['nation']; 31 $_SESSION['food'] = $row['food']; 32 $_SESSION['reason'] = $row['reason']; 33 $_SESSION['id'] = $row['id']; 34 35} 36 37 38 39 40 41// 42// Twig 43// 44 45// Composerで作成されたautoload.phpを読み込む 46require_once ('../vendor/autoload.php'); 47// Twing_Loader_Filesystemを使う。login_admin.phpからのtemplatesディレクトリを指定(相対パス) 48$loader = new Twig_Loader_Filesystem('../templates'); 49// $loaderをTwigの環境設定として twig instance を生成 50$twig = new Twig_Environment($loader); 51 52// Render 53echo $twig->render('login_admin.html',array( 54 55 'country' => $country, 56 'row' => $row, 57 'name' => $name 58 59 ) 60); 61

account_edit.php

php

1<?php 2// 開発時にこれを書かないのはNG 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6session_start(); 7header("Content-type: text/html; charset=utf-8"); 8 9require_once('./functions.php'); 10 11// ログインしていなければ login_form.php へ遷移 12require_logined_session(); 13 14// 初期化 15$name = ''; 16$email = ''; 17$password = ''; 18$tel = ''; 19 20// Twig で使うための変数を定義 21$name = $_SESSION["name"]; 22$email = $_SESSION["email"]; 23$password = $_SESSION["password"]; 24$tel = $_SESSION["tel"]; 25$userId = $_SESSION["userId"]; 26 27 28 29if (isset($_SESSION['errors'])) { 30 31 $errors = $_SESSION['errors']; 32 33} 34 35print_r($_SESSION); 36 37// 38// Twig 39// 40 41// Composerで作成されたautoload.phpを読み込む 42require_once('../vendor/autoload.php'); 43// Twig_Loader_Filesystemを使う。account_edit.phpからのtemplatesディレクトリを指定(相対パス) 44$loader = new Twig_Loader_Filesystem('../templates'); 45// $loaderをTwigの環境設定として tiwg instance を生成 46$twig = new Twig_Environment($loader); 47 48// render 49echo $twig->render('account_edit.html', array( 50 51 'errors' => $errors, 52 53 'userId' => $userId, 54 'name' => $name, 55 'email' => $email, 56 'password' => $password, 57 'tel' => $tel 58 59 ) 60); 61

account_edit_confirm.php

php

1<?php 2ini_set("display_errors", 1); 3error_reporting(E_ALL); 4 5session_start(); 6 7// 文字化け対策 8header("Content-type: text/html; charset=UTF-8"); 9 10require_once('./functions.php'); 11require_once('../config/db.php'); 12 13// ログインしていなければ login_form.php に遷移 14require_logined_session(); 15 16 17 18 19// 初期化 20$errors = array(); 21 22// POST時 23if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') { 24 25 26 $_SESSION["name"] = filter_input(INPUT_POST, 'name'); 27 $_SESSION["email"] = filter_input(INPUT_POST, 'email'); 28 $_SESSION["password"] = filter_input(INPUT_POST, 'password'); 29 $_SESSION["tel"] = filter_input(INPUT_POST, 'tel'); 30 31 $name = $_SESSION["name"]; 32 $email = $_SESSION["email"]; 33 $password = $_SESSION["password"]; 34 $tel = $_SESSION["tel"]; 35 36 37 // 38 // バリデーション 39 // 40 41 // 入力チェック 42 if (empty($_SESSION["name"])) { 43 44 $errors[] = "名前が入力されていません。"; 45 46 } 47 48 if (empty($_SESSION["email"])) { 49 50 $errors[] = "E-mailが入力されていません。"; 51 52 } 53 54 if (empty($_SESSION["password"])) { 55 56 $errors[] = "パスワードが入力されていません。"; 57 58 } 59 60 if (empty($_SESSION["tel"])) { 61 62 $errors[] = "電話番号が入力されていません。"; 63 64 } 65 66 67 // 名前の文字数チェック 68 if (strlen($_SESSION["name"]) >= 60) { 69 70 $errors[] = "氏名が長すぎます。"; 71 72 } 73 74 // パスワード文字数チェック(8文字以上かどうか) 75 if (preg_match("/^[a-zA-Z1-9]{1,7}$/", $_SESSION['password'])) { 76 77 $errors[] = "パスワードは8文字以上で入力してください。"; 78 79 } 80 81 // 電話番号の文字数チェック(10文字 or 11文字) 82 if (strlen($_SESSION['tel']) >= 1 && strlen($_SESSION['tel']) <= 9 && preg_match("/^[0-9]+$/", $_SESSION['tel'])) { 83 84 $errors[] = "電話番号は10文字か11文字で入力してください。"; 85 86 } elseif (strlen($_SESSION['tel']) >= 12 && preg_match("/^[0-9]+$/", $_SESSION['tel'])) { 87 88 $errors[] = "電話番号は10文字か11文字で入力してください。"; 89 90 } 91 92 // メールアドレス形式チェック 93 if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_SESSION['email']) && $_SESSION['email'] !== '') { 94 95 $errors[] = "メールアドレスに間違いがあります。"; 96 97 } 98 99 // 電話番号の形式チェック 100 if (preg_match("/[-]+/", $_SESSION['tel'])) { 101 102 $errors[] = "電話番号はハイフンなしで入力してください。"; 103 104 } 105 106 // 電番番号の数字チェック 107 // メールアドレス形式チェック 108 if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_SESSION["email"]) && $_SESSION["email"] !== "") { 109 110 $errors[] = "メールアドレスに間違いがあります。"; 111 112 } 113 114 115 116 117 118if (count($errors) > 0) { 119 120 $_SESSION["errors"] = $errors; 121 header("Location: account_edit.php"); 122 123} else { 124 125 $_SESSION['errors'] = array(); 126 127} 128 129} 130 131print_r($_SESSION); 132 133// 134// Twig 135// 136 137 138// Composer で作成されたautoload.phpを読み込む 139require_once('../vendor/autoload.php'); 140 141// Twin_Loader_Filesystemを使う。account_edit_confirmからのtemplatesティレクトリを指定(相対パス) 142$loader = new Twig_Loader_Filesystem('../templates'); 143 144// $loaderをTwigの環境設定として Twig instance を生成 145$twig = new Twig_Environment($loader); 146 147// render 148echo $twig->render('account_edit_confirm.html', array( 149 150 'errors' => $errors, 151 152 'name' => $name, 153 'email' => $email, 154 'password' => $password, 155 'tel' => $tel 156 157 ) 158); 159

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/02/24 11:12

何度か言われてると思うけど 編集情報を $_SESSION に保存していることが間違い
guest

回答1

0

まず、Cookieにパスワードのような秘密情報を保存するのはXSSという脆弱性があった場合に危険なので、やめたほうがいいと思います。

戻るボタンを押した時の表示を戻すというよりは、ユーザが確認画面で確定をするまでは表示する名前を変更せず、編集完了画面になってからデータを変更するようにする必要があると思います。
なぜなら、今の実装ですと、確認画面の意味がなく、確認画面に送信した段階でデータが書き換わってしまうからです。

確認画面から編集完了画面へデータを渡すときは表示用とは別のセッション変数に確定前のデータを保存するといいのではないでしょうか?

投稿2018/04/05 05:29

stmkza

総合スコア478

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問