XPressME Integration Kit

フォーラム

wordpress上でのcookie設定について

ようこそ フォーラム その他 wordpress上でのcookie設定について

このトピックには13件の返信が含まれ、2人の参加者がいます。3 年、 8 ヶ月前 匿名 さんが最後の更新を行いました。

14件の投稿を表示中 - 1 - 14件目 (全14件中)
  • 投稿者
    投稿
  • #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情報が削除されてしまったり
    するのでしょうか。

    大変恐れ入りますが、ご教授いただけますと幸いです。
    宜しくお願いいたします。

    #3497

    匿名

    いろいろ試していて気付いたのですが、

    上記の場合ですと、認証が必要な記事URLに直接アクセスされた場合、

    認証無で見れてしまうのでダメですね…。

    「ニュース」というカテゴリに属するページへのアクセスのみ、

    認証ページにリダイレクトさせ、「はい」・「いいえ」で認証。

    「はい」をクリックしたらcookie保存して記事ページへ。

    「いいえ」をクリックしたらサイトトップへ。

    一度認証したユーザーは一定時間cookieを保存して、

    他のニュースカテゴリ記事へのアクセスには認証がいらない。

    そんなイメージです。

    認証ページの「はい」をクリックした時点でcookieを保存させないと

    ダメそうですね。。。

    #3498

    toemon
    キーマスター

    お久しぶりです

    先週から福岡のほうへ出張してまして、手元にまともな環境がなく、年末まで、詳細な確認ができません。お正月休みに、少し確認させていただきますので、ご了承ください。

    #3499

    匿名

    ご多忙中お返事いただきありがとうございます。

    お手すきの際にでも、よろしくお願いいたします。

    #3500

    toemon
    キーマスター

    ky982339さん、あけましておめでとうございます。

    なぜかsingle.phpだと、cookie情報を持たせることができないようです。

    これはwordpressの何かしらの使用でcookie情報が削除されてしまったり

    するのでしょうか。

    の件、当方の確認(WordPress3.8にて)ではsingle.phpでsetcookieできないということはありませんでした。

    ブラウザのcookieにはきちんとセットされていますし、削除されてしまうということもありません。

    #3501

    匿名

    toemonさん、あけましておめでとうございます。

    年末はご多忙中、申し訳ございませんでした。

    single.phpでクッキーを設定して、ページを更新するとクッキーを保持していることが確認できるのですが、サイトトップに移動しても保持された状態でしょうか。

    また、認証を必要とする記事ページに直接アクセスがあった場合、

    クッキーを保持していればそのまま表示し、クッキーがない場合、

    認証ページ(adgecheck.php)にリダイレクトするということは可能でしょうか。

    今のところイメージしている流れは以下のようなサイトです。

    http://www.wani.com/

    (ワードプレスで作られているようです)

    http://www.wani.com/13877/

    のような記事URLにアクセスした場合、クッキー情報がないと年齢認証ページ

    http://www.wani.com/agecheck/?id=/13877/

    へ。

    すでにクッキーを保持している場合はスルーして記事が閲覧できるようになっています。

    #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

    #3503

    toemon
    キーマスター

    まず、クッキーに関しての問題を明らかにしたいと思います。

    single.phpでクッキーを設定して、ページを更新するとクッキーを保持していることが確認できるのですが、サイトトップに移動しても保持された状態でしょうか。

    デフォルトのWordPressでは、クッキーは明示的に削除するか、時間切れになるまでは削除されることはないと思います。

    こちらの環境では、サイトトップに移動すると削除されるということはありません。

    クッキーの挙動について再度確認をお願いします。

    ブラウザがFireFoxであれば

    Advanced Cookie Manager アドオン等を使って、ブラウザに保存されているクッキーがどのように変化するのかを確認してみるのもよいと思います。

    #3504

    toemon
    キーマスター

    リダイレクトというより、保護されている記事に対して、the_content()をフックして本文を確認用コンテンツに上書き表示する。

    確認用のコンテンツからの問い合わせで、クッキーを保存する。

    保存したクッキーがあれば、the_content()のフックで本文の上書きは行わない

    という流れでしょうか

    雰囲気的には、

    Lock a blog プラグインを参考にしてください。

    #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の値は[]です。」というように、クッキーの値を保持していません。

    #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を読み込ませています。

    もう少し試行錯誤してみたいと思います。

    #3507

    toemon
    キーマスター

    まず、single.phpでクッキーを設定した場合、トップページに遷移すると

    クッキーの設定がされません。

    いまいちCookieの状況が理解できません。(Cookieドメインが異なってような気もします。)

    トップページとはhome.phpのことでよね

    支障なければ問題のテストサイトのトップページURL、single.phpへのアクセスURLを教えていただけないでしょうか?

    また、single.php、home.phpを含めたテーマ全体のソースを提供していただけますでしょうか?

    上記が、可能であれば、メール(info@toemon.com)まで、情報提供お願いします。

    #3508

    匿名

    home.phpがトップページになります。

    なかなかうまくお伝えできず申し訳ございません。

    誠に恐れ入りますが、URL、テーマファイルを

    メールアドレス宛てにお送りさせていただきました。

    うまくお伝えできればいいのですが…。

    ご教授いただけますと幸いです。

    どうぞよろしくお願いいたします。

    #3509

    匿名

    toemon様

    おかげさまで解決いたしました。

    いつもご教授いただき感謝申し上げます。

    ありがとうございました!

14件の投稿を表示中 - 1 - 14件目 (全14件中)

このトピックに返信するにはログインが必要です。