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

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

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

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

Q&A

解決済

1回答

3348閲覧

クッキーの動きがディレクトリによって異なる

chapp

総合スコア233

PHP

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

0グッド

0クリップ

投稿2018/09/09 14:25

編集2018/09/09 14:29

お世話になります。昨日からCOOKIEの取り扱いについて試行錯誤を繰り返していますが(今日も一日中自宅にこもりPCの前にずっといた)、疑問ばかりが残り、アドバイスいただければと質問いたします。

昨日、同じくCOOKIEのことで質問したのですが、
https://teratail.com/questions/145593
現状、改めて説明させていただくと、下記のようなスクリプトをウェブページに設置し、アクセス履歴をクッキーに保存し、訪問履歴として後から確認出来ればと考えています。

<?php //$DataNo はページを表すパラメータであり、 "1-2" といった文字列が代入されている。 //■見た詳細ページをクッキーに■ if(isset($_COOKIE["watch"])){ $watch_data = $_COOKIE["watch"]; $watch_array = explode(" ", $watch_data); $key = array_search($DataNo, $watch_array); if(is_numeric($key)){ array_splice($watch_array, $key, 1); } if(count($watch_array) >= 20){ //20ページ以上は保存せず、古いデータから削除 array_splice($watch_array, 0, 1); } $watch_array[] = $DataNo; $watch_data = implode(" ", $watch_array); } else{ $watch_data = $DataNo; } setcookie("watch", $watch_data, time() + 60*60*24*30); ?>

これを朝から同じ内容のファイル(パラメータの部分だけ変更して)を複数用意し、を

http://***.com/AAA/cookieset1.php

http://***.com/AAA/cookieset2.php

http://***.com/AAA/cookieset3.php

http://***.com/AAA/cookieset4.php

のように設置し、また以下のスクリプトをcookie_delete.phpとして、

<?php session_start(); setcookie("watch", '', time() - 1800); ?>

保存されたクッキーを消しては削除を行い、正常に機能しているか確認をしています。

しかし、上記のように同じディレクトリ内に各ファイルがある場合は正常に機能していることを確認しているものの、同じファイルでも、以下のようにディレクトリが違うと違うディレクトリで操作(アクセス)したクッキーは繁栄していないことに気が付きました。

http://***.com/AAA/cookieset1.php

http://***.com/AAA/cookieset2.php

http://***.com/AAA/cookieset3.php

http://***.com/AAA/cookieset4.php

http://***.com/AAA/cookie_view.php

http://***.com/AAA/cookie_delete.php

というセットの他、この構成、同じ内容のファイル群を

http://***.com/BBB/CCC/cookieset1.php

http://***.com/BBB/CCC/cookieset2.php

http://***.com/BBB/CCC/cookieset3.php

http://***.com/BBB/CCC/cookieset4.php

http://***.com/BBB/CCC/cookie_view.php

http://***.com/BBB/CCC/cookie_delete.php

と設置し動作を確認していますが、AAAディレクトリ内でセットされたクッキーは、BBB/CCC/内では削除できないといった現象が起きています。

各ディレクトリ内にあるcookie_view.phpは以下のような簡単なものです。

<?php if(isset($_COOKIE["watch"])){ $cookie = $_COOKIE["watch"]; echo "cookie:".$cookie; } ?>

以上のような状況ですが、これまで同じドメイン(サイト)内であれば設置場所は問われることなく動作すると考えていたのですが、今回ディレクトリが違うことで動きが異なる状況が起きています。

/AAA/cookie_delete.php
で削除したはずのクッキーが
/BBB/CCC/cookie_view.php
では残っているなど、です。

お恥ずかしい話、本日朝からずっと試行錯誤を繰り返しているため、解決に向けアドバイスを頂ければと考え投稿いたしました。

お忙しい中恐縮でうすが、アドバイスのほどお願い出来れば幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

動作に疑いのある場合は、まず、リファレンスマニュアルを読みましょう。

おそらく仕様通りの動作です。

setcookie - PHP マニュアル には、

path
サーバー上での、クッキーを有効としたいパス '/' をセットすると、クッキーは domain 配下の全てで有効となります。 '/foo/' をセットすると、クッキーは /foo/ ディレクトリとそのサブディレクトリ配下 (例えば /foo/bar/) で有効となります。 デフォルト値は、クッキーがセットされたときのカレントディレクトリです。

とあるように setcookie で、パスを指定しない場合は、カレントディレクトリがパスとして指定されるので、ディレクトリごとに異なる動作になるのは仕様です。

ドメインで Cookie を共通にしたい場合は、全てのCookie に対して、パスに / を指定してください。

投稿2018/09/09 23:23

CHERRY

総合スコア25171

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

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

chapp

2018/09/10 15:52

CHERRYさん お忙しいところ、ご親切な回答をありがとうございます。 動作確認し正常に機能しているまで確認いたしました。 マニュアル・・キチンと読まなければダメですね。パスとドメインは省略可能と書かれた記事があったのですが、省略した場合、設置したディレクトリ以下が有効になるだけなのですね・・・ 以前、他のサイトで機能していたのですが、思い起こせば一番上の階層に設置していたことを思い出しました。 貴重なアドバイス、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問