• ベストアンサー

指定ディレクトリから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
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

cookie を読む側の細工で可能になる方法は知りませんが、書く側で Set-Cookie: NAME=foo; path=/ とやれば、同じサーバーの任意の位置でその cookie が普通に読めると思います。 書く側の意思と無関係に違うページの cookie を読むのは、セキュリティ的に問題ありそうです。

MASTER-PPC
質問者

お礼

有難うございます。確かにセキュリティ的な問題が…。書く側で設定する以外ないのかも知れませんね。

その他の回答 (1)

noname#169205
noname#169205
回答No.2

不可能です domain=hogehoge path=/html なクッキーはまともなブラウザなら ​http://hogehoge/html/より階層が下のページにしか送信されないはずです ブラウザから送られてきてないクッキーはどうやっても読むことは出来ません No.1の回答のようにpath=/にするしかありません

MASTER-PPC
質問者

お礼

有難うございます。

関連するQ&A

  • 書き込んだばかりの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
  • クッキーのデータ取得

    perlでのクッキーのデータ取得の方法について、ご質問です。 まず、同一のサイトから取得した、クッキーのパスは、/の、Aというクッキーと、Bというクッキーが存在して、 Aというクッキーのコンテンツのみを、 取得したいのですが、可能なのでしょうか? 下記のスクリプトに追加すると、 どういった形式になるのでしょうか? どなたかご教授いただけますでしょうか? よろしくお願いいたします。 &splt; sub splt { @cookdata = split(/;/,$ENV{'HTTP_COOKIE'}); foreach $tmp (@cookdata) { ($youso,$atai) = split(/=/,$tmp); $youso =~ s/ //; $COOKIE{$youso} = $atai; } }

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

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

    • ベストアンサー
    • Perl
  • Cookieの値の取得

    お世話になっています。 Cookieの値の取得について疑問がありますので、どなたか教えていただけないでしょうか? ------------------------------------------------------- /test/test1.php の中に <? setcookie ("test" , "hogehoge" ,time() + 86400 * 30); ?> ------------------------------------------------------- /test/test2.php の中に <? echo $HTTP_COOKIE_VARS[test]; ?> ------------------------------------------------------- /test2/test3.php の中に <? echo $HTTP_COOKIE_VARS[test]; ?> ------------------------------------------------------- というファイルを作成しました。(test3.phpのみ階層が違います) まず始めにtest.phpを表示させて、Cookieの情報を保存させます。 次にtest2.phpを表示させると、Cookieの情報を取得することが できますが、test3.phpを表示させると、Cookieの情報を取得すること ができません。これは、なぜなのでしょうか?また、取得する方法 はあるのでしょうか(無いわけは無いと思いますが・・・)? 以上です よろしく、お願い致します。 teraum

    • ベストアンサー
    • PHP
  • 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
  • $ENV{'HTTP_COOKIE'}について

    windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、 linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。 (※)・・・ショッピングカートの処理 ちなみにSSLを使用しているページです。 (1)画面A(http)から「カート入れる」ボタンをクリックし、画面B(https)に遷移 (2)画面Bに遷移した際にcookieに取得、保存 要するにhttpsでセットしたものをhttpsゲットしようとしています。 サーバーの環境は以下となります ■windowsサーバー ・OS : Windows 2003 R2 SP2 ・Perl ver : 5.8.7 ■linuxサーバー ・OS : Red Hat Enterprise Linux 4 ・Perl ver : 5.8.8 ・パーミッション : 757 ロジックは変更していないのでおそらくサーバーのどこかの設定を変更しなければならないのではないかと思われますが、どこに手を付けてよいのかがわかりませんので ご教授していただきたいです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 文字化けの事で?

    あるCGIを無料でダウンロードしました。 そのCGIはステップメールなのですが、使ってみていくつか弱点がありました。 特に気になるのはgmailだと文字化けしてしまう事です。 CGIとか全然いじった事がないからよくわからいのですが、プログラムのなかにデコード処理とかあったのでたぶんこれかと思いました。 以下のプログラムで何かおかしい(文字化けを起こす原因)箇所はあるのでしょうか? #//■デコード sub decode { local($buf, $key, $val); if (($ENV{'REQUEST_METHOD'} eq "POST") and ($post_flag ne 1)) { $post_flag=1; read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $post_flag=0; $buf = $ENV{'QUERY_STRING'}; } #csystem ($lc)=jcode::csystem($SCRIPT); foreach (split(/&/, $buf)) { ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # S-JISコード変換 &jcode'convert(*val, "sjis", "", "z"); # 不要コード排除 $val =~ s/"/&quot;/g; $val =~ s/</&lt;/g; $val =~ s/>/&gt;/g; if($key ne "comment"){ $val =~ s/\r|\n|\0//g; }else{ $val =~ s/\r|\0//g; } $in{$key} = $val; }

  • $ENV{'HTTP_COOKIE'}について

    windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、 linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。 (※)・・・ショッピングカートの処理 ちなみにSSLを使用しているページです。 サーバーの環境は以下となります ■windowsサーバー ・OS : Windows 2003 R2 SP2 ・Perl ver : 5.8.7 ■linuxサーバー ・OS : Red Hat Enterprise Linux 4 ・Perl ver : 5.8.8 ・パーミッション : 757 ロジックは変更していないのでおそらくサーバーのどこかの設定を変更しなければならないのではないかと思われますが、どこに手を付けてよいのかがわかりませんので ご教授していただきたいです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • cookieを設定

    Webブラウザが情報を保存する機能としてcookieがありますが、 JavaScriptでcookieを設定する方法と、 CGIがHTTPヘッダに「Set-Cookie」を含めてcookieを設定する方法が あるかと思います。 JavaScriptとCGIで設定する2つの方法のそれぞれのメリットは なんでしょうか? つまり、 JavaScriptを利用してcookieを設定する場合、Webサーバがcookieに 対応していなくても問題ないという利点はあることは分かりましたが、 他にはないのでしょうか? CGIでHTTPヘッダにcookieを保存しておいた場合、うれしいことは 何でしょうか?

  • LWP Cookie取得

    恐れ入ります。 LWPで、特定サイトにアクセスした時に発行されるCookieを任意のディレクトリに保存したいのですが、どのようにしたらよいかわかりません。 use HTTP::Cookies; use LWP::UserAgent; $ua = LWP::UserAgent->new(); $cookie_file = './cookie/xxx.txt'; $cookie_jar = HTTP::Cookies->new(file => $cookie_file, autosave => 1); $url = "http://~~"; $response = $ua->get($url); print $response->content; で、コンテンツは表示されますが、xxx.txtにcookieが保存されません。 #LWP-Cookies-1.0 のみが記載された白紙のxxx.txtが精製されます。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう