クッキーのセット・参照・削除に関して

このQ&Aのポイント
  • クッキーのセット・参照・削除に関して質問があります。
  • ログイン機能を持つサイトでクッキーを使用していますが、クッキーの参照がディレクトリによって異なる問題が発生しています。
  • 様々なディレクトリを巡回してクッキーをセット・削除する必要があるため、効率的な方法を教えていただきたいです。
回答を見る
  • ベストアンサー

クッキーのセット・参照・削除に関して

こんばんは、いつもお世話になっております。 ここ何度かクッキーに関して投函させていただき、ありがたいアドバイスにより随分と理解出来るようになってきたのですが、題名にありますように、セットから参照、そして削除に関してご意見、アドバイスを頂戴したく改め投函させて頂きました。 その流れというのも、 ログイン機能を有したサイトで、ログインする際チェックを付ける事で次回より自動ログインという流れを持たせたく、ページを開いた際にクッキーを参照しているのですが、ディレクトリが違うページでログインしていると、クッキーはそのディレクトリのみ参照できるといった状況となっています。 ソースはどのファイルでも同じもの setcookie("addr", $addr, time() + 60*60*24*30); setcookie("key_no", $key_no, time() + 60*60*24*30); 次回以降自動にてログインするには当然どのページからもクッキーを参照しなければならず、そこで仕方なく、クッキーをセットする際、header関数を用いてトップページのあるディレクトリへ一度移動し、クッキーをセット、そしてまた戻るという流れになっています。 しかしながらこの場合ですと、トップ以下、複数のディレクトリがあるので、全てのディレクトリを巡回して、その都度セットしなければならず、またログアウトする場合も全てのディレクトリを巡回し、その都度削除しなければなりません。 以上のように、スキルが乏しい中で出てきたものですが、上手く説明できない・・・などと思いながらも、考え方も含め、アドバイスやご指摘など伺えたら幸いに思います。お忙しい中恐縮ですが、宜しくお願い申し上げます。

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

>そのディレクトリより上の階層のものに対しては、どうすれば宜しいのでしょう。 / が一番上の階層です。pathは相対的な指定ではなく、絶対的な指定です。 簡単な例を書くと、 pathに / を指定した場合、 > http://hogehoge.com/ にアクセスする全てのリクエストにCookieが付加されます。 pathに /foo/ を指定した場合、 > http://hogehoge.com/foo/* にマッチするリクエストの時にCookieが付加されます。 >また、削除する場合は、上記に様にして各々 time() -1 とすれば良いのですか? Cookieを削除するには過去の日時を指定するので time() -1 でOKです。しかし、わざわざ計算することもないですし、-1 だとクライアントのシステム時間によっては削除されない可能性があるので 0 を指定するだけで良いと思います。

sadacha
質問者

お礼

Bonjin様 こんばんは。引き続きご丁寧なアドバイスを有難う御座います。 先日のアドバイスから、随分と(自分の中では)進歩出来たような気がします。 ご丁寧なアドバイスに対して言葉足らずなご挨拶ではありますが、ひとまず解決出来ました。有難う御座いました。

その他の回答 (1)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

Cookieを送って欲しいディレクトリを指定するにはSet-Cookieでpath属性を指定します。 今回の場合、/ 以下の全てに送って欲しいので setcookie関数のpath(第4引数)に / を指定します。

sadacha
質問者

お礼

Bonjin様 はじめまして、こんばんは。早速のお返事有難う御座います。 第4引数がpathを指定できるとは知りませんでした! 第4引数に全て/をとは、どんな風に記述すれば良いのでしょう?上記質問の場合、 setcookie("addr", $addr, time() + 60*60*24*30, "/○○"); setcookie("addr", $addr, time() + 60*60*24*30, "/○○"); setcookie("key_no", $key_no, time() + 60*60*24*30, "/△△"); setcookie("key_no", $key_no, time() + 60*60*24*30,"/△△"); という形になるのでしょうか? また、削除する場合は、上記に様にして各々 time() -1 とすれば良いのですか? なんか教えて君になっていますが、これまで試行錯誤を繰り返していますが、「あれ?いつの間に出来てる・・」といった事もあり、半信半疑なところもあって、「これはこうだよ!」と言い切っていただけるお言葉が頂戴したくて・・・ お忙しいなか恐縮ですが、宜しくお願い申し上げます。

sadacha
質問者

補足

Bonjin様 すみません。第4引数に"/" とすることで、そのディレクトリ以下全てのディレクトリに対して有効になるのですね。 そこで、そのディレクトリより上の階層のものに対しては、どうすれば宜しいのでしょう。通常の相対パスのように"../"としただけではセット出来ませんでした。今、マニュアルを見たのですが(かつ自分でも動かしてみた)、そこまでの説明が見当たらなかったもので・・。 お忙しい中恐縮ですが宜しくお願い申し上げます。

関連するQ&A

  • クッキーがセットされない

    こんばんは、お世話になっております。 事あるたびに投函しているようで恐縮なのですが、調べてもその原因がわからず、皆様のアドバイスを頂戴できればと投函させて頂きます。 下記のソースは、ログイン認証時のものですが、ID、パスワードを入力時、次回より自動ログインにチェックを入れたかの分別によりクッキーを送信する内容を変えているものです。 しかしながら、チェックを入れたときは無事クッキーがセットされるのですが、チェックを入れないときはクッキーがセットされません。 お忙しい中恐縮ですが、ソースの誤りはもちろん、クッキーがセットされないポイントなど御座いましたら、アドバイスいただければ幸いに思います。宜しくお願い致します。 $addr = $_SERVER['REMOTE_ADDR']; if($check == "auto"){//自動ログインにチェックを入れた場合 setcookie("addr", $addr, time() + 60*60*24*30, "/"); setcookie("key_no", $key_no, time() + 60*60*24*30, "/"); } else{//チェックなし。ブラウザを閉じるとクッキーを無効 setcookie("login", $addr, 0, "/"); setcookie("key_no", $key_no, 0, "/"); }

    • ベストアンサー
    • PHP
  • クッキーに関して

    こんばんは。お世話になっております。 ここ1~2週間ほどクッキーについて学んでいるのですが、開発環境と実際のweb上での動きに違いが見られ、何がどう違うのか?が見えなくなってしまいました。下記に現状を書き留めますのでご指導頂けたら幸いに思います。 $addr = $_SERVER['REMOTE_ADDR']; setcookie("addr", $addr, time() + 60*60*24); setcookie("key_no", $key_no, time() + 60*60*24); 以上を設置すると、web上のサーバーにアップしたものに関しては、クッキーのファイルに、addr、key_no共に保存されるが、ローカルではクッキーファイル内にkey_noが見られない。 ブラウザを閉じた後、クッキー情報を取得するために、 if(isset($_COOKIE["addr"])){  $addr = $_SERVER['REMOTE_ADDR'];  $addr1 = $_COOKIE["addr"];   if($addr == $addr1){ として始めるものの、web上ではクッキーの取得に成功し、ローカル上ではクッキーを認識しない。 と、以上のような状況です。ソース的な不備も含め、ご指導いただきたく思います。お忙しい中恐縮ですが宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • クッキー削除について

    トップページからユーザIDとパスワードを入力し、次回から自動的にログインのチェックボックスにチェックを入れるとクッキー保存するという流れですが、 逆にそのとき保存した部分のクッキーを削除する方法をご教授頂けないでしょうか? ログイン後、ログアウトするとクッキーを削除したいとおもいます。 宜しくお願い致します。 ・レンタルサーバはロリポップです。 ・クッキーを保存するソースは↓ <?php $login=$_POST['login']; $email=$_POST['email']; if($login=="on"){ setcookie("email",$email,time()+(60*60*24*90)); echo mb_convert_encoding("保存しました","SJIS","EUC-JP"); } else{ echo mb_convert_encoding("クッキーを利用しません","SJIS","EUC-JP"); } ?>

    • ベストアンサー
    • PHP
  • クッキーについて

    setcookie('hoge')したものを、 ディレクトリー違いで$_COOKIE['hoge']したいのですが、 うまく出来ません。方法を教えて下さい。 または、認証ページで認証OKなら、 クッキーをセットして./abc/hoge.phpへ移動 認証NGならクッキーを開放して./def/hogehoge.phpへ ページ移動をさせたいです。 お手数をお掛け致しますが、宜しくお願いします。

    • 締切済み
    • PHP
  • 特定のクッキーを削除したくない

    お世話になります。 会員ページにログインする時、一般的にIDとパスワードを入力すると 思うのですが、ブラウザーのスレイプニルでウインドウを閉じた時 クッキーや履歴を自動的に削除する設定にしています。 なので次回ログインするとき、再度入力の必要があるのですが、 これを簡素化できる方法はないものかと思っています。 履歴や他のクッキーは削除しても、たとえばgooだけは次回ログイン するとき、入力する必要がないようにしたいのです。 なにか方法がありましたらよろしくお願いします。

  • session_startでクッキー範囲をパス指定

    session_start();する際、setcookieでパス指定するみたいに、クッキーの有効範囲をディレクトリで指定したいのですが、どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • クッキーの名前について

    はじめまして、PHPでクッキーを利用したいのですが、 クッキーの名前で悩んでいます。 Windowsに保存されているクッキーを見てみると、 クッキーの名前が、 Cookie:******@?????? ****:Windowsにログインしているユーザー名 ????:ドメイン となっているものがあります。 概して大手サイトより発行されたクッキーがこのようになっているように思えます。 自分で作成したPHPでクッキーを発行してみると、 setcookie()で指定したpathの部分が名前となるようです。 また、pathを指定しないと発行元のphpが存在するディレクトリ名に なります。  クッキーの名前が”Cookie:******@??????”となるのは、何か意味があるのでしょうか? セキュリティーなどにからんでこうなるとしたら、同じようにしないといけないのかな?でも、Windowsのユーザー名ということは、他のOSでは不都合が生じるのかな?と悩んでしまい、質問させていただきました。 お分かりになる方いらっしゃいましたらご回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • 特定のdirで発行したcookieを上のdirで参照できますか?

    特定のdirで発行したcookieを上のdirで参照できますか? クッキー発行では、PATHやドメイン等は設定しておらず、クッキー名とUserIDとPASSしか発行していないのですが、 PATHを設定した場合、クッキー値は、クッキーを生成したWebページ、同じディレクトリ内のWebページ、 同じディレクトリ内のサブディレクトリ内のWebページで参照が可能らしく、 省略時はCookie を設定したページのパス名になる。との事らしいのですが、 /A/a1/bbs.cgiへ認証した際に発行されたクッキー(クッキー名/ID/PASS)を /A/bbs.cgiで参照ってできますでしょうか。 上の階層である /A/bbs.cgi(同じCGIスクリプト)でクッキー情報を参照した場合、クッキー名だけが参照できている状況で困惑しています。 どなたか正しい情報をご掲示頂けませんでしょうか。宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Firefoxのクッキーは有効なのに「有効にしろ」と要求が出る

    FC2でログインする際、「パスワードを次回から再入力しなくてもログインできる」というラジオボタンがログインする際に下のほうにあり チェックを入れるとクッキーが有効なのに 「クッキーを有効にしてください」と要求が出ます。 意味不明なんですけど、、はじめはクッキーが無効なのかと思い、調べてみたら僕のブラウザのクッキーは有効になっているようです。 もし、解決できそうならば教えていただけますでしょうか? OS:Vista ブラウザ:Firefox2.0

  • JavaScriptによるクッキーの書込みについて

    JavaScriptによるCookieの書込みで以下のようにhtmlにはりつけているのですが、どうしてもpath=/が有効になりません。 書き込まれたクッキーをみるとクッキーを書き込むディレクトリになってしまいます。 <script type="text/javascript"> <!-- var limit = 1; //有効期限日数をいれる exp=new Date(); exp.setTime(exp.getTime()+1000*60*60*24*limit); var no = '01010088'; var img_url = './0101/img/0088/01010088i.gif' var url= './0101/01010088.html'; var itemname= '遠赤外線セラミックの竈(かまど)炊き風炊飯鍋と御櫃(おひつ)セット'; var price = '7960'; var souryou = '700'; setCookie(no,'img:' + img_url +',url:' + url + ',itemname:' + itemname + ',price:' + price + ',souryou:'+ souryou +',',exp); function setCookie(key, val, val_exp,tmp) { tmp = key + "=" + escape(val) + "; "; tmp += "expires= " + val_exp.toGMTString(); + "; "; tmp += "path=/;"; document.cookie = tmp; } // --> </script> 書籍をいろいろみたのですがクッキーについて詳しくかいているのがあまりなくて・・・ ご教授お願いします。

専門家に質問してみよう