wordpress上でのcookie設定について
永らくありがとうございました › フォーラム › その他 › wordpress上でのcookie設定について
- このトピックには13件の返信、2人の参加者があり、最後に
匿名により9年前に更新されました。
-
投稿者投稿
-
2013 年 12 月 20 日 7:26 AM #2714
匿名
ゲストtoemon様
ご無沙汰しております。ky982339でございます。
おかげ様で、xpressmeサイトの他に最近はwordpressサイトも
そこそこ作れるようになってきました。これもひとえに、toemonさんのご教授あってのことと感謝しております。
このたび、wordpressでのcookieができないかと、
wordpress関連のコミュニティでは解決できず…
お差支えなければアドバイスいただけませんでしょうか。何をしたいかと申しますと、特定の投稿記事を訪れたユーザーに
cookie情報を与えて、表示コンテンツを振り分けたいと考えております。通常のphpでは振り分けができたのですが、
なぜかwordpressになるとcookieを持たせることができません。たとえば以下のような感じです。
■home.php
テーマ内、コンテンツ部分に以下を記述。
<code><?php<br /> if (isset($_COOKIE['GenreCookie']))<br /> $GenreCookie = $_COOKIE['news'];<br /> if($GenreCookie == "news"): ?><br /> <br /> //ニュースを訪れたユーザーには記事ページに直接アクセスさせる。<br /> <?php<br /> echo '<a href="'. get_permalink() .'">'. get_the_title() .'</a>';<br /> ?><br /> <br /> <? else: ?><br /> <br /> //ニュースページに訪れていないユーザーには特定の固定ページにアクセスさせる。<br /> <?php<br /> echo '<a href="'. home_url('/userinfo.html') .'?id='. post_custom('book_id'). '">記事を読む前にこちらをお読みください。</a>';<br /> ?><br /> <br /> <?php endif; ?></code>
■single.php
<?php get_header(); ?>の上に以下を記述。
<code><?php<br /> setcookie("GenreCookie", "news", time()+3600);//有効期限3600秒<br /> ?></code>
試しにpage.phpの<?php get_header(); ?>上部に記述した場合、
固定ページを訪問してサイトトップに移動すると、
cookie情報を取得できます。なぜかsingle.phpだと、cookie情報を持たせることができないようです。
これはwordpressの何かしらの使用でcookie情報が削除されてしまったり
するのでしょうか。大変恐れ入りますが、ご教授いただけますと幸いです。
宜しくお願いいたします。2013 年 12 月 22 日 9:41 AM #3497匿名
ゲストいろいろ試していて気付いたのですが、
上記の場合ですと、認証が必要な記事URLに直接アクセスされた場合、
認証無で見れてしまうのでダメですね…。
「ニュース」というカテゴリに属するページへのアクセスのみ、
認証ページにリダイレクトさせ、「はい」・「いいえ」で認証。
「はい」をクリックしたらcookie保存して記事ページへ。
「いいえ」をクリックしたらサイトトップへ。
一度認証したユーザーは一定時間cookieを保存して、
他のニュースカテゴリ記事へのアクセスには認証がいらない。
そんなイメージです。
認証ページの「はい」をクリックした時点でcookieを保存させないと
ダメそうですね。。。
2013 年 12 月 23 日 5:38 PM #3498toemon
キーマスターお久しぶりです
先週から福岡のほうへ出張してまして、手元にまともな環境がなく、年末まで、詳細な確認ができません。お正月休みに、少し確認させていただきますので、ご了承ください。
2013 年 12 月 24 日 3:28 AM #3499匿名
ゲストご多忙中お返事いただきありがとうございます。
お手すきの際にでも、よろしくお願いいたします。
2014 年 1 月 2 日 5:11 AM #3500toemon
キーマスターky982339さん、あけましておめでとうございます。
なぜかsingle.phpだと、cookie情報を持たせることができないようです。
これはwordpressの何かしらの使用でcookie情報が削除されてしまったり
するのでしょうか。
の件、当方の確認(WordPress3.8にて)ではsingle.phpでsetcookieできないということはありませんでした。
ブラウザのcookieにはきちんとセットされていますし、削除されてしまうということもありません。
2014 年 1 月 4 日 8:09 PM #3501匿名
ゲストtoemonさん、あけましておめでとうございます。
年末はご多忙中、申し訳ございませんでした。
single.phpでクッキーを設定して、ページを更新するとクッキーを保持していることが確認できるのですが、サイトトップに移動しても保持された状態でしょうか。
また、認証を必要とする記事ページに直接アクセスがあった場合、
クッキーを保持していればそのまま表示し、クッキーがない場合、
認証ページ(adgecheck.php)にリダイレクトするということは可能でしょうか。
今のところイメージしている流れは以下のようなサイトです。
(ワードプレスで作られているようです)
のような記事URLにアクセスした場合、クッキー情報がないと年齢認証ページ
http://www.wani.com/agecheck/?id=/13877/
へ。
すでにクッキーを保持している場合はスルーして記事が閲覧できるようになっています。
2014 年 1 月 5 日 12:00 PM #3502匿名
ゲスト先ほどのサイトの場合、フラグが無いかつ年齢認証が必要な場合は、
アクセスしようとしたURLの後ろにパラメータを持たせて年齢認証ページへ
リダイレクトさせているようです。
年齢認証ページ(adgecheck.php)には以下のコードを。
<code><?php<br /> if(isset($_GET['id'])) {<br /> $id = $_GET['id'];<br /> }<br /> ?><br /> <br /> <form name="mainForm" method="post" action="/test10/<?= $id ?>/"><br /> <input id="submit" type="image" value="18歳以上" src="<?php bloginfo('template_directory'); ?>/images/ageover.gif"><br /> <input id="ageCK" type="hidden" value="yes" name="adult"><br /> </form></code>
single.phpのheader上部に書いてみましたが、無限ループにハマったりとうまくいきませんでした…。
<code><?<br /> // POSTされてきたCookie値<br /> $adult = $_POST["adult"];<br /> <br /> // Cookieに値を保存する<br /> setcookie("cookie_key", $adult);<br /> ?><br /> <br /> <?php<br /> if ($_COOKIE['adult']) {<br /> $data = $_SERVER["REQUEST_URI"];<br /> list($domain,$dir_01,$dir_02) = explode("/",$data);<br /> header("Location: /test10/$dir_02/");<br /> } else {<br /> $data = $_SERVER["REQUEST_URI"];<br /> list($domain,$dir_01,$dir_02) = explode("/",$data);<br /> header("Location: /test10/adgecheck/?id=$dir_02");<br /> }<br /> ?></code>
まったく的を得ていない感じでしょうか…orz
2014 年 1 月 6 日 2:39 PM #3503toemon
キーマスターまず、クッキーに関しての問題を明らかにしたいと思います。
single.phpでクッキーを設定して、ページを更新するとクッキーを保持していることが確認できるのですが、サイトトップに移動しても保持された状態でしょうか。
デフォルトのWordPressでは、クッキーは明示的に削除するか、時間切れになるまでは削除されることはないと思います。
こちらの環境では、サイトトップに移動すると削除されるということはありません。
クッキーの挙動について再度確認をお願いします。
ブラウザがFireFoxであれば
Advanced Cookie Manager アドオン等を使って、ブラウザに保存されているクッキーがどのように変化するのかを確認してみるのもよいと思います。
2014 年 1 月 8 日 11:34 PM #3504toemon
キーマスターリダイレクトというより、保護されている記事に対して、the_content()をフックして本文を確認用コンテンツに上書き表示する。
確認用のコンテンツからの問い合わせで、クッキーを保存する。
保存したクッキーがあれば、the_content()のフックで本文の上書きは行わない
という流れでしょうか
雰囲気的には、
Lock a blog プラグインを参考にしてください。
2014 年 1 月 20 日 7:58 AM #3505匿名
ゲストtoemon 様
お世話になります。
ご指摘いただきながら、なかなか再現できず時間を要してしまいました。
まず、single.phpでクッキーを設定した場合、トップページに遷移すると
クッキーの設定がされません。
環境はfirefoxです。
single.php header上部に設置。
<code><?php<br /> setcookie("age", yes ,time()+259200);<br /> ?></code>
single.php内に確認コード(<body></body>内)
<code><p>現在のCookieの値は [<b><?= $_COOKIE["age"] ?></b>] です。</p></code>
home.phpにも確認コードを記述(<body></body>内)
<code><p>現在のCookieの値は [<b><?= $_COOKIE["age"] ?></b>] です。</p></code>
投稿記事にアクセスし、ページを更新すると、
「現在のCookieの値は[yes]です。」と表示され、クッキーが保持されていることがわかります。
しかし、サイトトップに移動すると、
「現在のCookieの値は[]です。」というように、クッキーの値を保持していません。
2014 年 1 月 20 日 8:21 AM #3506匿名
ゲスト教えていただいたプラグイン「Lock a blog」を試してみましたが、
ちょっとイメージとは違うようでした。
クッキーを用いたリダイレクト処理のイメージとしましては…
───────────────────────────
1.特定のカテゴリに属する記事にアクセスがあった場合、クッキーの値をチェック。クッキーの値があればそのまま表示。なければ年齢認証ページにリダイレクト(ページIDをパラメータとして保持させる)。
2.年齢認証ページで「はい」・「いいえ」を選択させる。
「はい」の処理にはフォームを利用し、クッキーの値を閲覧ページへポストする。form actionにパラメータ(記事ID)を代入して1のページへ。
3.2でクッキー値が送信されるので、クッキーを保存し閲覧ができるようにする。
───────────────────────────
まず1の処理につきまして、single.phpのheader上部に以下を設置。
<code><?php<br /> //URLから「/」でディレクトリ名を分解し指定した変数に入れる<br /> $data = $_SERVER["REQUEST_URI"];<br /> list($domain,$dir_01) = explode("/",$data);<br /> <br /> if (isset($_COOKIE['age'])) {<br /> $age = $_COOKIE['age'];<br /> if($age == "yes") {<br /> header("Location: http://example.com/$dir_01/");//yesが入っている<br /> } else {<br /> if(isset($_GET['id'])) {<br /> $id = $_GET['id'];<br /> }<br /> header("Location: http://example.com/adgecheck/<?= $id ?>");//入っていない<br /> }<br /> }<br /> <br /> // POSTされてきたCookie値<br /> $age = $_POST["age"];<br /> <br /> // Cookieに値を保存する<br /> setcookie("age", $age,time()+259200);<br /> ?></code>
2の認証ページにて以下を設置(adgecheck.php)。
<code><?php<br /> if(isset($_GET['id'])) {<br /> $id = $_GET['id'];<br /> }<br /> ?><br /> <form name="mainForm" method="post" action="<?php bloginfo('url'); ?>/<?= $id ?>/"><br /> <input id="submit" type="image" value="18歳以上" src="<?php bloginfo('template_directory'); ?>/images/18age.gif"><br /> <input id="agecheck" type="hidden" value="yes" name="age"><br /> </form></code>
いろいろ試行錯誤してみましたが、上記の場合ですと、
クッキーを保持していなくても見れてしまい、年齢認証ページで「はい」を選択し、
値をポストしても保持されません。
single.phpの記述はいろいろ調べたコードをあれこれ試してみたもので、
エラーは出ないのですが機能しない状況です。
リダイレクト処理あたりは全く自信がありません…orz
ちなみに、特定のカテゴリ記事のみsingle.phpで読み込むヘッダーを分けて、上記のコード1を読み込ませています。
もう少し試行錯誤してみたいと思います。
2014 年 1 月 21 日 1:54 AM #3507toemon
キーマスターまず、single.phpでクッキーを設定した場合、トップページに遷移すると
クッキーの設定がされません。
いまいちCookieの状況が理解できません。(Cookieドメインが異なってような気もします。)
トップページとはhome.phpのことでよね
支障なければ問題のテストサイトのトップページURL、single.phpへのアクセスURLを教えていただけないでしょうか?
また、single.php、home.phpを含めたテーマ全体のソースを提供していただけますでしょうか?
上記が、可能であれば、メール(info@toemon.com)まで、情報提供お願いします。
2014 年 1 月 21 日 9:01 AM #3508匿名
ゲストhome.phpがトップページになります。
なかなかうまくお伝えできず申し訳ございません。
誠に恐れ入りますが、URL、テーマファイルを
メールアドレス宛てにお送りさせていただきました。
うまくお伝えできればいいのですが…。
ご教授いただけますと幸いです。
どうぞよろしくお願いいたします。
2014 年 1 月 22 日 4:45 PM #3509匿名
ゲストtoemon様
おかげさまで解決いたしました。
いつもご教授いただき感謝申し上げます。
ありがとうございました!
-
投稿者投稿
- このトピックに返信するにはログインが必要です。