cookie が有効かどうかを判断する方法とは?

このQ&Aのポイント
  • cookie が有効かどうかを判断する方法について考えています。質問文章では、ブラウザーが cookie が有効かどうかを調べるためのスクリプトを紹介しています。しかし、初回アクセスでは0が返ってくる場合があり、cookie の書き込みと読み出しのタイミングに疑問を持っています。
  • 質問者は、cookie を書き込んだ後、読み出そうとするときに特定のタイミングがあるのか疑問に思っています。一度リロードしてから読み出す必要があるのか、それとも何か別の方法があるのか知りたいそうです。
  • 質問者は、この問題を考え込んでいるようですが、ベテランの方にとっては簡単な問題かもしれません。どのような方法で cookie が有効かどうかを判断するのか、具体的な解決策やヒントを教えてもらえればと思っています。
回答を見る
  • ベストアンサー

cookie が有効がどうか判断させたいのですが・・・

HPを見ているブラウザーが cookie が有効かどうか しらべたいのですが、よくある cookie の書き込みと 読み出しのサンプルを使って以下のようなスクリプトを 考えました。 $cookie_flg = 1; print &setCookie("CHECK", $cookie_flg); # Cookie の値を得る &getCookie(); $cookie_flg = $COOKIE{'CHECK'}; if ($cookie_flg eq '') { $cookie_flg = 0; # Cookie が使えない } return $cookie_flg; ・・・これでわかるでしょうか? ブラウザーでは実際に、cookie が使える状態 なのですが、アクセス最初の1回目は 0 が返って くるのです。 ( 2回目以降は 1 が返ってきて望みどおりです ) ひょっとして、cookie の仕様として、書き込んで から、すぐに読み出そうとしても、読めないもの のでしょうか? それとも、cookie を書き込んだあと、一旦、 print "Content-type: text/html\n\n"; で閉めてから、読み出さないといけないとか??? こんなんで、何日もうんうん考え込んでます。 ベテランの方には、あまりに馬鹿馬鹿しい問題 なのかもしれませんが・・・

  • yasu
  • お礼率79% (173/218)
  • Perl
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • nak205
  • ベストアンサー率60% (40/66)
回答No.1

ご推測の通り、Cookieを書き込んでから同じプロセスでそのCookieを読み込むことはできません。 CookieはCGIが呼び出されたときに環境変数の一つとして読み込まれます。ですからサンプルでは、書き込む以前にすでにCookieが読み込まれています。 ブラウザのCookieが有効になっているか否かは、別のCGIかJavaScriptであらかじめ書き込んでおく必要があります。

yasu
質問者

補足

ありがとうございました。 アドバイスいただけたので、自作CGIでよくよく 確認したところ、まさしくおっしゃるとおりでした。 これでようやく納得しました。。。

関連するQ&A

  • Cookieがクリアされない

    入力フォームを作っています。 トップのフォームにクッキーをセットして、確認画面→登録完了フォームでクッキーをクリアにしています。 クッキーの登録は全て良いんですが、Cookieは、IEではちゃんとクリアされるんですが、Netscape,Firefoxではクリアされません。 色々試したんですが、お手上げ状態です。 ご教授お願いします。 print "Content-type: text/html\; charset=shift_jis\n"; $CookieSet .= "Set-Cookie: $CookieName=$CookieValue\; expires=$GmtString\;"; print "\n"; print "Content-type: text/html\; charset=shift_jis\n"; $ClearCookie .="Set-Cookie: $CookieName=clear\; expires=$ExpiresTimeString\;";#過去の日付'Thu, 01-Jan-2000 00:00:00 GMT' print "\n";

    • ベストアンサー
    • Perl
  • Cookieが保存できない。

    CGIをつかってクッキーを保存しようと試みています。 以下のように記述しておりますがなぜかクッキーファイルが生成されません。 print "Content-type: text/html\n"; print "Set-Cookie: NAME=test\n"; print "\n"; print "テスト"; 何か問題がるのでしょうか?もちろんブラウザ上ではクッキーは有効にしていますし、ほかの他クッキーファイルは存在します。 ブラウザはIE6.0です どなたかご教授お願いします。

    • ベストアンサー
    • CGI
  • COOKIEを使った二重投稿禁止する方法

    COOKIEを利用して二重投票を禁止するようにしたいと思っています。 $id=12; //スレッドID if(isset($_COOKIE[$id])){ print("連続投票です。"); exit; }else{ setcookie($id , "vete_flg" , time()+$3600*24*7); } 上記のようにしているのですが、COOKIEにきちんと記録されず、 print_r($_COOKIE)を見たところ、上記と同じように設定した 新規投稿スレッドのCOOKIE「Array ( [entry] => entry_flg ) 」 が表示されてしまいます。 どうすれば用途別にCOOKIEを切り分けて二重投稿等を禁止できるのか、 その方法を教えてください。m(_ _)mペコリ

    • ベストアンサー
    • PHP
  • Cookieを用いてのセッション管理

    以前も問い合わせさせていただいた件なのですが、 未だ解決していないので、再掲させていただきます。 やりたいことは、 個人認証のページを作り、ログオフ後、ブラウザの戻るボタンを押しても、 ログイン中となるのを避けたい。 以下のような感じで、cookieを使って実現しようとしているのですが、 ログオフ時にcookieの削除は、うまくいったのですが、 ブラウザの戻るボタンでログイン中のページに戻ると、 $ENV{'HTTP_COOKIE'}の中身を見ると、実際にはCookieは削除されているにも関わらず、 Cookieの情報がよみこまれているため、ログイン中となってしまいます。 何か基本的なやり方を間違っているような気がします。 どなたかご教授願います。 ↓a1.cgi(ログイン画面)--------------  : (ID、パスワード認証後) #Cookie書き込み print "Content-type: text/html\n"; print "Set-Cookie: NAME=aaa; expires=Tue, 1-Jan-2030 00:00:00 GMT;\n"; print "\n";  : ↑a1.cgi(ログイン画面)-------------- ↓a2.cgi(ログイン中)--------------  : #Cookie読み込み $cookie01 = "$ENV{'HTTP_COOKIE'}\n";  : <HEAD> <!-- キャッシュクリア --> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT">  : </HEAD>  : ↑a2.cgi(ログイン中)-------------- ↓a3.cgi(ログオフ)--------------  : #cookie削除。 print "Content-type: text/html\n"; print "Set-Cookie: NAME=aaa; expires=Fri, 31-Dec-1999 23:59:59 GMT;\n"; print "\n";  : </HEAD>  : ↑a3.cgi(ログオフ)-------------- ※a1.cgi、a2.cgi、a3.cgiは同じディレクトリです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 特定の cookie を指定して読むことは可能ですか

    cookie は通常 cookie を書き込んだcgi でしか読み 書きできないのでしょうか? つまり cookie.cgi を実行中に print &setCookie("CHECK", 1); とかで書き込んだ cookie を、別のcgi (例:test.cgi) から参照すること、書き込むことは不可能でしょうか。

    • 締切済み
    • CGI
  • Cookieが消える?

    こんにちは 自作のWebページを作成したのですが 画面遷移を繰り返しているとCookieが 消えることがあるのです。 こういうことってあるのでしょうか? 環境は以下の通りです。 OS:Win2000,XP Pro ブラウザ:IE 6.0 Cookie書込み:javascript setCookie("bbb","hammy") function setCookie(key, val, tmp) { tmp = key + "=" + escape(val) + "; "; tmp += "path=/aaa/;"; tmp += "expires=Tue, 31-Dec-2030 23:59:59; "; document.cookie = tmp; } Cookie読込み:javascript function getCookie(key, tmp1, tmp2, xx1, xx2, xx3) { tmp1 = " " + document.cookie + ";"; xx1 = xx2 = 0; len = tmp1.length; while (xx1 < len) { xx2 = tmp1.indexOf(";", xx1); tmp2 = tmp1.substring(xx1 + 1, xx2); xx3 = tmp2.indexOf("="); if (tmp2.substring(0, xx3) == key) { return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1))); } xx1 = xx2 + 1; } return(""); } Cookie削除 javascript delCookies("CCC") function delCookies(key) { tmp = key; tmp += "=;path=/aaa/;"; tmp += "expires=Thu,01-Jan-2000 00:00:01 GMT"; document.cookie = tmp; } 画面遷移 A画面でCookie書込み⇒B画面でCookie情報を読込み ⇒C画面でCookie情報を読込み 現象:C画面でCookieが読込めない。 備考:C画面では読込みの前に別のCookieを削除しています。 B画面ではCookieの有無をチェックしているだけです。 何か疑問に思えることがありましたら教えてください。

  • cookieによる制限の件で

    function getExpires(dd){ var now = new Date(); var expires = new Date(now.getTime()+24*60*60*1000*dd); return(expires.toGMTString()); } function setCookie(key, value, limit){ var cValue = key + "=" + escape(value) + "END;expires=" + getExpires(limit) + ";"; document.cookie = cValue; } function getCookie(key){ var cValue = document.cookie; var sIndex= cValue.indexOf(key,0); if(sIndex > -1){ sIndex = cValue.indexOf("=", sIndex) + 1; eIndex = cValue.indexOf("END", sIndex); return unescape(cValue.substring(sIndex, eIndex)); }else{ return ""; } } var value = getCookie("visitCnt"); var cnt = 1; if(value >= 6){ location.href="http://yahoo.co.jp"; } if(value == ""){ document.write(""); }else{ cnt = parseInt(value) + 1; document.write(""); } setCookie("visitCnt", cnt, 365*2); 以上のソースで、6回目の訪問でyahooへ飛ぶようには出来たのですが、 これだと、設置したページへ6回訪問で、となってしまうのですが、 サイト自体への6回目のアクセスで、というふうに、ページ自体にこだわらずへの設定はどう記載すれば、よろしいでしょうか?? よろしくお願いいたします。

  • cookieを保存したあとのりダイレクトができません

    CGI利用についての質問ですが、 print "Set-Cookie:~" でcookieに情報を保存したあと、 print "Location: http://url\n\n"; として リダイレクトさせようとしてもできず、 ブラウザではダウンロードのアラートが出てきてしまいます。 cookieを保存したあとのリダイレクトはどのようにすればよいでしょうか?

    • ベストアンサー
    • Perl
  • $_COOKIEについて

    はじめまして。 PHPを勉強中なのですが$_COOKIEを使った際にエラーになってしまいます。 それが何故なのか分からないのですが、この辺に詳しい方助けて下さい。 ↓↓状況は以下のとおりです。↓↓ ・開発環境:xampp、php、vista ・下記のスクリプトを記述してブラウザで表示すると、「1回目のアクセスです。」とともにエラー表示も出てきてしまう。 <?php if (isset($_COOKIE["count"])) { $count = $_COOKIE["count"] + 1; } else { $count = 1; } setcookie("count", $count); echo "${count}回目のアクセスです。"; ?> ・上記のスクリプトを実行した際のエラー表示は「 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs(ディレクトリ)php:182) in (エラーの行数) ・ちなみに、練習で作ってるだけなので同じページに、「setcookie」と「$_COOKIE」を使っている。(ただし、クッキー名などは、前に使っているのとは被らないようにしている) 以上です。 やりたい事は、ブラウザにCookieを送り、読み込むたびに「?回目のアクセスです。」の回数を増やしていきたいです。 しかし、これも出来ずに何度読み込みしても「1回目のアクセスです。」とエラー表示しかでません。 この質問で上手く伝わったかわかりませんが、ご見識ある方お力添え下さいませ。

    • ベストアンサー
    • PHP
  • どうしてもCookieとCGI・perlの関係?が理解できない。

    ととろさんのところを(http://tohoho.wakusei.ne.jp/www.htm)みながら、なんとかPerl・CGIを勉強しているところです。 普通にフォームに入力されたものをログファイルにとる、などはできるようになったのですが、 どうしてもクッキーのところでつまづいてしまいます。 Cookie書き込みの例、のところに、 Set-Cookie: NAME=tanaka; Fri, 31-Dec-2030 23:59:59; とやったら、tanakaというクッキーが作成されるのでしょうか? どうしてもこの辺がわからないのです。 これを実行する場合、 #!/usr/local/bin/perl print "Content-type:text/html\n"; print "Set-Cookie: NAME=tanaka; Fri, 31-Dec-2030 23:59:59;" print "\n"; のようにやるのですか? 最終的にはフォームの入力値を取得・反映したいと考えているのですが…。 あちこちわかりやすいと言われるcgi・PERL解説サイトをみたのですが、どうしてもここだけが理解できませんでした。

    • ベストアンサー
    • CGI

専門家に質問してみよう