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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

2回答

1808閲覧

php setcookieとpostの条件分岐がうまくいきません

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

0クリップ

投稿2019/03/04 14:03

編集2019/03/04 14:11

解決したいことは、phpのsetcookieで1回目のアクセスと2回目以降で分岐かつ、
postのでパスワードがマッチした時に、モダールウィンドウが閉じる処理をしたいのですが、

1回目のアクセス時 → パスワード入力 OK → 他ページ移管した時に再度パスワードが出てしまいます。

通常は、パスワード入力 OK →他ページ移管した時は、setcookieで指定した時間内はパスワード画面を出したくありません。

パスワード画面を出したいときは、初回アクセス時、かつ パスワードが違う時、かつ2回目以降アクセス時かつパスワードが違う時です。

ご教授いただけますでしょうか。

function.php

//setcookie add_action( 'get_header', 'my_setcookie'); function my_setcookie() { if ( is_archive()|| is_single() ) setcookie( 'visitedHome', 'true', time() + 60*60*24*1, '/' ); //setcookie( 'isMobile', wp_is_mobile() ? 'true' : 'false', 0, '/' ); }

// header.php

<?php $http = is_ssl() ? 'https' : 'http' . '://'; $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; $pass = get_field('password','option'); if ( isset( $_COOKIE['visitedHome'] ) && ($_POST['pass'] == $pass) ) : ?> <?php echo '<p class="name">2回目かつパスワードOK場合</p>'; ?> <?php $http = is_ssl() ? 'https' : 'http' . '://'; $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; $pass = get_field('password','option'); elseif (!isset( $_COOKIE['visitedHome'] ) && ($_POST['pass'] !== $pass)) :?> <?php // パスワードチェック // パスワード不一致(パスワード入力フォーム表示) echo '<div class="blog-modal-wrap">'; echo '<div class="blog-modal-area">'; echo '<div id="access"></div>'; //echo '<button id="del">Cookieを削除する</button>'; echo '<p class="name">1回目かつパスワード違う場合</p>'; echo '<p class="name">内容を見るには暗証番号が必要です。</p>'; echo '<form action="'. $url .'" method="POST" class="blog-form-area">'; echo '<input type="password" size="5" name="pass" value="">'; echo '<input type="submit" value="開く"><br>'; echo '</form>'; echo '</div>'; echo '</div>'; ?> <?php $http = is_ssl() ? 'https' : 'http' . '://'; $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; $pass = get_field('password','option'); elseif (isset( $_COOKIE['visitedHome'] ) || ($_POST['pass'] !== $pass)) :?> <?php // パスワードチェック // パスワード不一致(パスワード入力フォーム表示) echo '<div class="blog-modal-wrap">'; echo '<div class="blog-modal-area">'; echo '<div id="access"></div>'; //echo '<button id="del">Cookieを削除する</button>'; echo '<p class="name">2回目かつパスワード違う場合</p>'; echo '<p class="name">内容を見るには暗証番号が必要です。</p>'; echo '<form action="'. $url .'" method="POST" class="blog-form-area">'; echo '<input type="password" size="5" name="pass" value="">'; echo '<input type="submit" value="開く"><br>'; echo '</form>'; echo '</div>'; echo '</div>'; ?> <?php $http = is_ssl() ? 'https' : 'http' . '://'; $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; $pass = get_field('password','option'); elseif (isset( $_COOKIE['visitedHome'] )) :?> <?php // パスワードチェック // パスワード不一致(パスワード入力フォーム表示) echo '<div class="blog-modal-wrap">'; echo '<div class="blog-modal-area">'; echo '<div id="access"></div>'; //echo '<button id="del">Cookieを削除する</button>'; echo '<p class="name">ページ移動2回目の場合</p>'; echo '<p class="name">内容を見るには暗証番号が必要です。</p>'; echo '<form action="'. $url .'" method="POST" class="blog-form-area">'; echo '</form>'; echo '</div>'; echo '</div>'; ?> <?php else : ?> <?php endif; ?>

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

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

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

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

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

yambejp

2019/03/05 03:28

コピペしてもエラーがでまくるので もっとシンプルな作りのものを例示されたほうがよいでしょう
退会済みユーザー

退会済みユーザー

2019/03/05 08:27

ご回答いただきありがとうございます。 当方、WordPressで利用しておりまして、 setcookie関数をfunction.phpからadd_action( 'get_header'〜で読み込みしております。 引き続き検証してまいります。 ありがとうございます。
guest

回答2

0

Webサイトのページ遷移部分は、毎回 POST で パスワードを送信するようなコードを記述していますか?

具体的な内容が不明ですが、たとえば <a href="〜"></a> のようなリンクをクリックして GETメソッドでページ遷移していたりすることはありませんか?

$_POST の値は、前回アクセス時の値が保存されているわけではなくアクセス毎に設定されますので、ページ遷移する際に毎回 POSTメソッドでパスワードを送信していない場合や GETメソッドでアクセスした場合は、$_POST['pass'] は 未定義か '' になります。

そのため、$_POST['pass'] に値がないので、必ずパスワード不一致の場合の ($_POST['pass'] !== $pass) 条件が成立して、ダイアログが表示されるのではないかと思います。


Webサーバー側で、前回アクセスした際の値を維持したいのであれば、session を使って session に内容を保存するようにしてください。

PHPマニュアル 関数リファレンス セッション関連 参照。

投稿2019/03/05 03:35

編集2019/03/05 04:05
CHERRY

総合スコア25171

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

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

退会済みユーザー

退会済みユーザー

2019/03/05 08:30

ご回答いただき誠にありがとうございます。 フォームのパスワード認証は、以下の参考に利用しております。 ◆PHPパスワード認証 http://webings.net/php/pass/ ◆WordPressでの「setcookie」は以下を参考に組み込みしております。 http://designhack.slashlab.net/php-note-for-setting-cookie-in-wordpress/ 上記の2つを元に、「if ( isset( $_COOKIE['visitedHome'] )) : ?>」にて 1回目と2回目以降の分岐内にパスワードのtrueとfalseの分岐処理を記述しております。 sessionを利用するとのこと、ご教授いただきましてありがとうございます。 sessionで検証してみます。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/03/05 08:40

認証後、<a href="〜"></a>でページ移管をしております。 そのときに、setcookieで指定した時間は、再び認証画面は出したくありません。 session start();で実現できるか検証してみます。
guest

0

ベストアンサー

以下の記述で解決しました。

wordpressの場合、session_startをwp-configに記述することでsessionを正常に動作することができました。

wp-config.php

if (!session_id()) session_set_cookie_params(60 * 1); session_start();

heder.php

<?php session_set_cookie_params(60 * 1); session_start(); $http = is_ssl() ? 'https' : 'http' . '://'; $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; $message = ''; if(isset($_POST['login'])){ // ② if ($_POST['password'] == 'test'){ // ③ // ④ $_SESSION["USER"] = 'user'; //header("Location: top.php"); //exit; echo '<p>'; echo '$_SESSION["'.USER.'"]'; echo 'さんでログイン中</p>'; echo '<div class="remove">'; echo '<form method="post" action="'.$url.'">'; echo '<input type="submit" name="logout" value="ログアウト">'; echo '</form>'; echo '</div>'; } else{ // ⑤ $message = 'パスワードが間違っています。'; } } if (!isset($_SESSION['USER'])) { //header('Location: login.php'); //exit; echo '<form method="post" action="'.$url.'">'; echo '<label for="password">パスワード</label>'; echo '<input id="password" type="password" name="password">'; echo '<br>'; echo '<input type="submit" name="login" value="ログイン"><br>'; echo '<input type="submit" name="logout" value="ログアウト">'; echo '</form>'; } //ログアウト機能 if(isset($_POST['logout'])){ // ① $_SESSION = []; session_destroy(); //header('Location: login.php'); //exit; } ?>

投稿2019/03/06 07:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問