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

この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
  • 回答数5
  • ありがとう数6

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

  • ベストアンサー
回答No.5

多分、クッキーとセッションの組み合わせが良いのではないでしょうか? 私も、最近になってセッションを使い始めたので詳しいことは判りませんが・・・

sadacha
質問者

お礼

NickAomori様 こんにちは。お返事が遅くなって申し訳ありません。 解決までには至っておりませんが、(もう少し自分でも調べつつ・・)少し様子を見てみようかと思います。 色々とご指導いただき有難う御座いました。今回のやり取りの中で、少しは(自分的には大分!)理解出来たかと思います。

その他の回答 (4)

回答No.4

$addr = $_SERVER['REMOTE_ADDR']; if($check == "auto"){//自動ログインにチェックを入れた場合 setcookie("addr", $addr, time() + 60*60*24*30, "/"); setcookie("login", '', time() + 60*60*24*30, "/"); setcookie("key_no", $key_no, time() + 60*60*24*30, "/"); } else{//チェックなし。ブラウザを閉じるとクッキーを無効 setcookie("addr", 'NG', time() + 60*60*24*30, "/"); setcookie("login", 'NG', time() + 60*60*24*30, "/"); setcookie("key_no", 'NG', time() + 60*60*24*30, "/"); } ソースを上記のように変更してみては、いかがでしょうか? これでチェックしない場合も、各クッキーに'NG'が書き込まれるはずですよね? 書き込まれないので有れば、それ以外の原因です。 チェックの場合は、addrに値,loginは空欄,key_noに値 未チェックの場合は、addrに値,loginは値,key_noに値  が書き込まれるのが正常な動作なのでしょうか?

sadacha
質問者

お礼

NickAomori様 こんばんは。お付き合いいただき有難う御座います。 只今、ご指導いただいた内容で試したところ、無事クッキーをセットすることが出来ました。 しかしながら、チェックを入れない場合は、「ブラウザを閉じたらクッキーを無効に・・」という事を踏まえ、time() + 60*60*24*30,を time()-100や、0とするとセットされないのです。 time()+60*3であれば、セットされるものの、時間の経過と共に、当然クッキーが無効となってしまいます。 今回の設定は、ブラウザを閉じたらクッキーを無効(削除?)にしたく、その理由とは、ログイン認証した者はログアウトするまで新しいブラウザを開いてもログインを継続させたい、といった考えから出てきた内容です。 些か当初の質問に言葉足らずなところが御座いましたが、ブラウザを閉じるまでクッキーを有効にする、という設定は、有効期限の箇所を、0 にすれば宜しいのですよね?でも何故かクッキーがセットされません。 time() + 60*60*24*30 だとセットされるのですが・・・。 幾度の渡るアドバイスに感謝しております。

回答No.3

何度もすみません。以下の様に変更してはいかがですか? $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, time()-100, "/"); setcookie("key_no", $key_no, time()-100, "/"); }

sadacha
質問者

お礼

NickAomori 様 こんばんは。何度も有難う御座います。 只今、time()-100に変更してみましたが、クッキーはセットされないようです。 また、同じ名前login→addrでも行ってみましたが、これもセットされないようです。 チェックを入れないとクッキーがセットされない状況になっています。 度重なるご指導、感謝いたします。

回答No.2

>しかしながら、チェックを入れたときは無事クッキーがセットされるのですが、チェックを入れないときはクッキーがセットされません。 どのクッキー名にセットされないのでしょうか? セットされないとは、値が入らない?値が空にならない?のどちらでしょうか? ソースから、私が考えると チェックがあれば、以下のクッキーに書込 addr に $addr key_no に $key_no をセットし、30日間 チェックがなければ、以下のクッキーを無効 login に$addr key_no に $key_no  (addrのクッキ名ーがないですよね?addrは一度セットされてしまっていれば、30日間は有効のままですよね?、ここかな?) クッキーがチェック有りと、チェック無しでクッキー名前が違うのですが、それですか? あと、クッキーを無効にするので有れば、有効期限を0にすれば良いです。

sadacha
質問者

お礼

NickAomori 様 こんにちは。お忙しい中、早速のお返事有難う御座います。 >ソースから、私が考えると...... 仰る通りです。クッキーの名前が違うのはあえてそうしているのですが、 チェックがあった場合30日間有効で、もう一方は仮に1人の方が違うIDを 持っていた場合、新たにブラウザを立ち上げた場合、ログイン中に他の IDでログインしないようするための処置として設定いたしました。 テストで状況確認は30日間有効のチェックを削除(ログアウト)して 行っているので、チェックのあった場合のクッキーはない状態で確認しています。 NickAomori様のアドバイスを察すると、キックーは同じ名前でセットすべきなのでしょうか・・。

回答No.1

setcookie("login", $addr, 0, "/"); setcookie("key_no", $key_no, 0, "/"); クッキーの有効期限が0だからじゃないですか? setcookie("login", $addr, time() + 60*60*24*30, "/"); setcookie("key_no", $key_no, time() + 60*60*24*30, "/"); としたらどうですか?

sadacha
質問者

お礼

NickAomori様 はじめまして、おはよう御座います。 休み明けの朝のご回答、ありがとう御座います。 >クッキーの有効期限が0だからじゃないですか? 最初、この設定で躓いていたのですが、この有効期限を0にしているのは、ブラウザを閉じたらクッキーを無効としたいための処置としています。 ブラウザを閉じたら無効にするための記述は違うのでしょうか? 色々と調べて居てはいるものの、無効にするには有効期限を省略と説明があるものの、そのあとのパスの指定もあるので、あえて0として記述しています。

関連するQ&A

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

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

    • ベストアンサー
    • 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
  • ブラウザによるクッキー処理につきまして

    現在、クッキーを利用してログイン~ログアウト等の処理をしていますが ブラウザによって動作が異なるようです。 動作と言いましても特殊な事では無く、ログイン後手操作でログアウトしたらそのままログアウト。 ログイン中でもクッキーの設定時間を過ぎたらログアウト可能にしたいのですが IEはバージョン6以降では特に問題も無く思ったとおりの動きを してくれますが、Firefoxでは(ver3.6.2)手操作での任意のログアウトが出来ません。 具体的には、サンプルソースの様にlogin.phpでクッキーを設定してlogout.phpで クッキーを削除していますが、Firefoxではクッキーが削除されません。 その為、ログイン後 手操作でログアウトしてもFirefoxではログアウト出来ません。 クッキー設定での時間を経過したら、ログアウト出来ます(クッキーも削除されます) ログイン側~ログアウト側 両方とも時間など、いくつかやり方を変えて見ましたが 対策が見えていません。 (ブラウザによる相違があるようでしたのでサンプルソースの様にif文で分けています。) Firefoxでは何か設定のやり方があるのでしょうか。 ご存知の方がいらっしゃいましたらご教授の程お願いします。 ■環境 OS:WindowsXP WEBサーバー:apache2.0 PHP:バージョン5.2 IE:バージョン 6/7 (クッキー許可) Firefox:バージョン 3.6.2 (クッキー許可) //-------------------------------------------- // login.php (省略サンプルソース) // クッキー設定 $userid = 'abcd'; $Agent = getenv( "HTTP_USER_AGENT" ); if (eregi("firefox", $Agent)){ // Firefox //setcookie('login_regist', $userid, time()+1); setcookie('login_regist', $userid, time()+20); }else{ // IE setcookie('login_regist', $userid, time()+20); } //-------------------------------------------- // logout.php (省略サンプルソース) // クッキー削除 $userid = 'abcd'; $Agent = getenv( "HTTP_USER_AGENT" ); if (eregi("firefox", $Agent)){ // Firefox //setcookie('login_regist', $userid, time()-2400); setcookie('login_regist', $userid, time()+0); }else{ // IE setcookie('login_regist', $userid, time() - 2400); }

    • 締切済み
    • 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
  • クッキーの削除方法

    PHP5にて以下のようにクッキーを連想配列でセットしています。 setcookie("cookie[1]", "10", time()+600); setcookie("cookie[2]", "20", time()+600); setcookie("cookie[10]", "100", time()+600); この場合、一部のクッキー(例えばcookie[2]で設定したもの) だけを削除するにはどうすれば宜しいのでしょうか? 試しに以下の様に記述してみましたが、上手く削除されませんでした。 setcookie("cookie[2]"); また、全てのクッキー(全ての連想配列)を いっぺんに削除する方法もありましたら、お教えください。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPでクッキーをセットできない

    PHPとJavaScriptを使っゲームを作っていますが、PHPでクッキーをセットしようとすると以下のようなメッセージが出てきて、データがセットされません。 「ヘッダー情報を修正できない」というメッセージはどんな意味なのでしょうか? setcookie()関数をどこで使えばうまくいくのでしょうか? 詳しい方がいらっしゃいましたら、よろしくお願いいたします。 使った関数=setcookie("gameOverTime", $cookieData, time() + 60*60); メッセージ= Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\QAgameOver.php:1) in C:\xampp\htdocs\QAgameOver.php on line 10

    • ベストアンサー
    • PHP
  • ブラウザを終了するとCookie情報も消える。。

    知っている方いましたらご教授お願いいたします。 ■現象 safari・クロームにてCookie情報を保存したハズなのに 上記、2つのブラウザを終了⇒起動すると 保存したハズのCookie情報が消えている。 ■PHPソース $timeout = time() + (365*30) * 86400; setcookie('LOGIN_ID' ,$USER_LOGIN_ID_TEXT , $timeout,'/','lolipop.jp'); setcookie('LOGIN_PASS' ,$USER_LOGIN_PASSWORD_TEXT , $timeout,'/','lolipop.jp'); setcookie('LOGIN_CHK' ,'checked' , $timeout,'/','lolipop.jp'); ■補足 上記3つの、ログインID・パスワード・保存するかどうかのチェックボックスの3つをクッキーに保存しています。 ドメインはロリポップを利用しています。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • クッキーに配列データを

    こんばんは。お世話になってます。 クッキーに配列データを保存したく、調べながら試行錯誤を繰り返していますが行き詰まってしまい、 アドバイスを頂戴できればと投函させて頂きます。 やりたいことは、掲示板にて書き込まれた内容をDBで管理しているのですが、各スレッドごとに1つのファイル(ページ)にて 呼び出しており、ページを閲覧した際、過去に1度でも閲覧した内容はカウント(訪問者数)せず、初めて閲覧した時のみ カウントするといった内容にしたいのですが、DBに登録されているデータも複数あることから、 DBに登録されているデータの連番を、配列データ(クッキー名:view)としてクッキーに登録しようと 考えるところまで至っていますが、うまく登録することが出来ずにいる次第です。 他にもっと適切なやり方があったら、そのご意見も頂戴したいのですが、以上のような考え方の場合、以下のスクリプトにおいて、 どこが不適切なのかをご指摘いただければ幸いにおもっております。 以下が、現在テスト中のスクリプトです。 $view_array = $_COOKIE["view[]"]; $view_array = unserialize(base64_decode($view_array)); //print_r($view_array); if(isset($_COOKIE["view[]"])){ if(!in_array($pno, $view_array)){ $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array[] = $pno; setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } }else{//クッキーに該当する配列がなかった場合 $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array = array($pno); setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } 以上、お忙しいなか恐縮ですが、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • クッキー認証>クッキー削除ができない!!

    今回は、クッキー認証画面を作成している際、 エラーが出てしまって先に進めず投稿しました。 下記にプログラム記載 ----H_01.html---------------------------------- <html> <head> <title>クッキー認証</title> </head> <body> <center> <form method="POST" action="H_02.php"> 名前<input type="text" name="name"> パスワード<input type="Password" name="pass"> cookieを記録する<input type="checkbox" name="chk"> <input type="submit" value="送信"> <input type="reset" value="リセット"> </form> </center> </body> </html> ------------------------------------------------ -----H_02.php---------------------------------- <?php $name = $_COOKIE['name']; $pass = $_COOKIE['pass']; $cnt = $_COOKIE['chk']; if ($cnt == True) { $lim = time()+7*24*60*60; //有効期限1週間 setcookie('name',$name,$lim); setcookie('pass',$pass,$lim); } else { setcookie('name'); setcookie('pass'); } ?> ------------------------------------------------ else文内の、setcookie二行にエラーが出ます。 htmlでチェックボックスにチェックが施されていない場合、クッキーを削除。 調べてみたのですが、どうしたらよいのかわからず 投稿しました。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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> 書籍をいろいろみたのですがクッキーについて詳しくかいているのがあまりなくて・・・ ご教授お願いします。

専門家に質問してみよう