• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クッキーのデータ取得)

perlでクッキーのデータ取得方法について

このQ&Aのポイント
  • perlを使用して同一のサイトからクッキーのデータを取得する方法について教えてください。
  • 特定のクッキーのコンテンツだけを取得することは可能でしょうか?
  • 提供されたスクリプトを追加するとどのような形式になるのか知りたいです。

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

  • ベストアンサー
  • t140
  • ベストアンサー率39% (59/150)
回答No.1

クッキーはパスごとに共通で、それ以上は分けられないはずです。 同じパスのうちで、どのファイルがどちらのコンテンツに属してるのかをwwwサーバが 全て把握でもしない限り制御できませんので当然でしょう。 そこで、なんとかコンテンツ毎に取得できるように判別するしかありません。 例えば "A" というコンテンツには頭に "A_" をつけるルールを自分で決める方法があります。 「例」A_id=1; A_name=taro; A_age=15 このルールを決めた上で、以下のように頭に "A_" が付くコンテンツAの値のみを取得する感じになります。 @cookdata= grep(/^A_/, split(/;\s*/, $ENV{HTTP_COOKIE}));

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 指定ディレクトリからcookie取得

    $cook = $ENV{'HTTP_COOKIE'}; foreach ( split(/;/, $cook) ) { ($key, $val) = split(/=/); $key =~ s/\s//g; $cook{$key} = $val; } $cook{'name'} ./index.cgiで、上記のように$ENV{'HTTP_COOKIE'}でクッキーを取得しています。 このままでは./に保存されたクッキーが取得されてしまいますが、これを、任意のディレクトリ(./../html/等)に保存された場所から取得したいと考えていますが、可能でしょうか。 CGIが設置されているディレクトリ = 'http://hogehoge/cgi-bin/'; COOKIEを読み込むディレクトリ = 'http://hogehoge/html/';

    • ベストアンサー
    • Perl
  • Perlのサンプルを見ていると

    ・・・・・・・・ #// クッキー取得 if ($ENV{'HTTP_COOKIE'}) { *data = GetCookie($ENV{'HTTP_COOKIE'}); @w = split(/\,/, $data{$cknm}); $test = @w[0]; } ・・・・・・・ というのがあったのですが @w[0] と書くのは正しいのでしょうか?

    • ベストアンサー
    • Perl
  • クッキーが消せない

    下記のDelcookieを呼び出してクッキーを削除したのですがdocument.write(document.cookie);で見ると0421066NQ=Tdoprzahdoqekdnaaac&04aaacと表示されてクッキーが消せません。 スクリプトでクッキーを消すにはどうすれば良いのでしょう? function Delcookie(){ if(document.cookie==""){ alert("このサーバによるCookieはありません。") }else{ tmp=document.cookie.split(";");     dTime = new Date();      dTime.setYear(dTime.getYear() - 1); for(i=0;i<tmp.length;i++){ temp1=tmp[i].split("=")[0]; document.cookie=temp1+"=;expires=" + dTime.toGMTString(); } alert("このサーバによるCookieを削除しました。"); } }

  • Macでクッキーが呼び出せない

    以下のような遷移を作っております。 ・HtmlファイルにJavaScriptでクッキーを以下のように書き込む。 var no = '01010088'; var img_url = '../01010088i.gif'; var url= '../01010088.html'; var itemname= '日本語商品名'; var price = '7,960'; var souryou = '1';//有料の場合は1 無料の場合は0 setCookie(no,img_url +':' + url + ':' + itemname + ':' + price + ':'+ souryou +':'+ exp2 + ':',exp,limit); function setCookie(key,val,val_exp,val_limit) { tmp = key + "=" + escape(val) + "; "; tmp += "path=/ ;"; if(limit > 0){tmp += "expires= " + val_exp.toGMTString(); + "; ";} document.cookie = tmp; } ・CGIでクッキーを呼び出す。その際UTF-16をデコード処理してSjisにしております。 #クッキーの取得 &getCookieName(); ここにデコード処理を書いております。多いので割愛 sub getCookieName { local($xx, $name, $value); foreach $xx (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $xx); $pure_value = $value; $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; $COOKIE{$name} = $value; push @COOKIE,"$name:$value$pure_value:\n"; } } で実際Windowsで閲覧するとクッキー情報が正常に出力されるのですが、Mac、自社サーバーにアップしたページを見るとOKなのですがあるレンタルサーバーに同じものをアップしてみるとだめなのです。 あいまいな表現ですが、なにかこれだけの情報でなにが原因か事例がありますか? もし不足な情報ならご指示ください。

    • ベストアンサー
    • CGI
  • perlの文法について

    はじめましてstaraman_sです。 今はPerl/CGI辞典という本を使いながらPerlの勉強をしていますが、インターネットで検索しても解決できず困っています。 皆さんのお力をお貸しください。 疑問点 sub getCookie { my ($tmp, $name, $value); for $tmp (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $tmp); $value =~ s/\%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $COOKIE{$name} = $value; } } 本の中の掲示板のプログラムの中に上記のようなプログラムが書いてあるのですが、最後の方に$COOKIE{$name} = $value;とあります。変数$COOKIEの後に中括弧を使い{$name}と書いているのは、どういった文法からきているのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • クッキー書き込みが正常に行われない?

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=394703 を質問していたものです。 1.フォームで名前を入力 2.1の情報をクッキーに書き込み ということをやりたいのです。 (応用いたしますが、基本はこれです。) 1つ目のcgiで、フォームで名前を入力。 -----1.cgi-------------------- #!/usr/local/bin/perl print "Content-type:text/html\n\n"; print "<form method=post action=2.cgi>\n"; print "<input type=text name=name></input><BR>\n"; print "<input type=submit value=ok></input><BR>\n"; print "</form>\n"; exit; ------------------------------ 1.cgiの名前のデータを呼び込もうとしてもエラーになる。 -----2.cgi-------------------- #!/usr/local/bin/perl read(STDIN,$atai,$ENV{'content_length'}); ($key, $value) = split(/=/, $atai); $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; print &setCookie("name",$value); print "Content-type:text/html\n\n"; print "名前:<FONT COLOR=RED>",$value,"</FONT>と送信されました。<br>\n"; #Cookie書き込み。 sub setCookie{ local($tmp,$val); $val = $_[1]; $val =~ s/(\W)/sprintg("%%%02X",unpack("C",$1))/eg; $tmp="Set-Cookie: "; $tmp .="$_[0]=$val; "; $tmp .="expires=Thu, 1-Jan-2030 00:00:00 GMT;\n"; return($tmp); } ------------------------------ クッキー書き込みをしないで実行すると、きちんと名前が表示されます。 どこをなおせばきちんとクッキーにセットされるのでしょうか? 何度も申し訳ありませんがよろしくお願いします。

    • ベストアンサー
    • CGI
  • クッキーの発行と取得

    現在作成しているWebコンテンツ内でCGIスクリプト(Perl)とPHPスクリプトが混在しているのですが、クッキーの処理で困っています。 CGIのほうで発行したクッキーはPHPで取得できるのですが、PHPで発行したクッキーをCGIでうまく読み込めていないようなのです。 CGIのほうは、無料配布サイトで見つけたものなのでPHP化もなかなか難しいところですし、原因と解決方法が分かりません。 一体どのようにすればいいのか、どなたかお教えいただけないでしょうか。よろしくお願いします。

    • ベストアンサー
    • PHP
  • Perlで携帯電話の製造番号を取得

    Perlで携帯電話の製造番号を取得 Perlで携帯電話の製造番号を取得するスクリプトを作っています。 docomoのD905iしか持っておらず、他の携帯での動作確認ができません。 以下のスクリプトで正しいでしょうか? 以下のスクリプトで、他にやっておいたほうがよい事など、 何かアドバイスがありましたらお願いします。 やりたいことは、 docomo、au、ソフトバンクのみで取得する。 iPhone、イーモバイルは取得しない。 古い携帯電話で取得できないものは切り捨てる。 携帯電話でアクセスした人が、それぞれに画面をカスタマイズでき、 次回アクセスしたときも同じ画面が表示されるようなサイトを作ろうとしています。 普通はクッキーで本人確認するのだと思いますが、携帯電話ではクッキーが 無いので、代わりに製造番号を使って本人確認しようと考えています。 1ヶ月くらいだけオープンするサイトであり、金銭的な絡みも個人情報も無いので、 携帯電話の所有者が変わったときの問題は無いと思っています。 ■ HTML <a href="./test.cgi" utn>製造番号取得</a> ■ Perl #--ソフトバンク if($ENV{'HTTP_X_JPHONE_UID'} ne ''){ $uid = $ENV{'HTTP_X_JPHONE_UID'}; } #--au elsif($ENV{'HTTP_X_UP_SUBNO'} ne ''){ $uid = $ENV{'HTTP_X_UP_SUBNO'}; } #docomo else{ $agent = $ENV{'HTTP_USER_AGENT'}; $ser_index = index($agent,'ser'); if ($ser_index != -1) { $uid = substr($agent,$ser_index+3); } } print"製造番号:$uid<br>\n"; 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 書き込んだばかりのcookieが読み込めません

    cookieを書込んだ直後、書込めたか(cookieをオフにしていたり、cookieを書込めない携帯端末からのアクセスかもしれないので)確認をしようと、cookieを読込もうとしたのですが、cookieが書込まれているにもかかわらず情報を取得することができません 実験環境として、htmlファイルにボタンを作って、cgiへ飛び、そのcgi内でcookieを書込み、cookieが書込めたかどうかで分岐して、表示するようにしています (cgiを一度実行したあと一旦ブラウザで前のhtmlファイルに戻って)cookieが既に書込まれた状態で、改めてhtmlファイルのボタンを押せばcookieは読込めますが、最初にcookieを書込んだ時に同じcgi内で即読込みを行ったら読込めません 書込が完結する前に読込みに行っているから読込めないのかとも思い、読込み前にタイムラグを作っても見ましたがやはり読込めません どうすれば書込み直後に読み込めるのでしょうか? 色々ネットで調べても見ましたが、いっこうに解決策が見つかりません ご存じの方ぜひご教授下さい よろしくお願いします なお、下にperlのコードを書いておきます #クッキーを書込 $test{sid} = "12345"; &set_cookie($test{sid}); #タイムラグ use Time::HiRes; Time::HiRes::sleep(0.8); #クッキーを読込 ($cookie{test}) = &get_cookie; if(!$cookie{test}){ print "読み込めてない"; } else{ print "読み込めた"; } ######→読み込めません##### #クッキー書込sub sub set_cookie { local(@cook) = @_; local($gmt, $cook, @t, @m, @w); @t = gmtime(time + 2*60*60); @m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]); foreach (@cook) { s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $cook .= "$_<>"; } print "Set-Cookie: SID=$cook; expires=$gmt; path=/;\n"; } #クッキー読込sub sub get_cookie { local($key, $val, *cook); $cook = $ENV{'HTTP_COOKIE'}; foreach ( split(/;/, $cook) ) { ($key, $val) = split(/=/); $key =~ s/\s//g; $cook{$key} = $val; } foreach ( split(/<>/, $cook{'SID'}) ) { s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; push(@cook,$_); } return (@cook); }

    • ベストアンサー
    • Perl
  • SSIで呼び出したURLの取得

    a.shtmlから ../a.cgi をSSIで呼び出したとき、a.shtmlのURLを取得したいのですが、うまい方法はありますでしょうか。 $ENV{'REQUEST_URI'} $ENV{'SCRIPT_FILENAME'} $ENV{'SCRIPT_NAME'} で表示してみたら、a.cgiのURL(パス)が出てきて、a.shtmlのURL(パス)が出てこなかったのです。 よろしくお願いします。

    • ベストアンサー
    • Perl