WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:httpのURL

0:[投稿] ダンサー [2002/09/07 06:21 ][環境:WIN+IE WIN系+Perl]

クッキーを使っているのですが
URLをクッキーから取り出すときに
httpしか取り出せません
クッキーから取得するときは確かにファイルで書き出したら
きちんとhttp://www・・・・
と入っているのですがどうしてでしょうか?

クッキー取得
    $cookies = $ENV{'HTTP_COOKIE'};#クッキー取得


@pairs = split(/;/,$cookies);

foreach $pair(@pairs){
    local($name, $value) = split(/=/, $pair);
    $name =~ s/ //g;
    $DUMMY{$name} = $value;
}
#local($name);

@pairs = split(/,/,$DUMMY{'ATUO'});
foreach $pair (@pairs){
    ($name,$value) = split(/:/,$pair);
    $COOKIE{$name} = $value;
    
}

$COOKIE{$name}にはきちんとしたURLが入っていました
が↓には
<input type="text" size="60" name = "url" value = "$COOKIE{'url'}">
”http”しか入りません


1:[回答] TOM neko [2002/09/07 14:25 ]

url:http://www.
となってたら、
$nameがurlで$valueがhttpになりますね。
cookieデータをどうセットしたのか謎ですが。


2:[回答] ダンサー [2002/09/07 18:07 ]

どうも回答ありがとうございます
発行は↓です

($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg)
                = gmtime(time + 60*24*60*60);

    @mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
    $date_g = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT",
        $week[$wdayg],$mdayg,$mons[$mong],$yearg+1900,$hourg,$ming,$secg);
if($pwd == 1){$pwd eq ""};
#if($answer{'url'} == 1){$url eq "" };
    $cook="name\:$answer{'name'}\,mail\:$answer{'mail'}\,pwd\:$answer{'pwd'}\,url\:$answer{'url'}\,hito\:$answer{'hito'}";
    print "Set-Cookie: ATUO=$cook; expires=$date_g\n";


3:[回答] TOM neko [2002/09/07 18:24 ]

ならば、$answer{'url'}の中の「;,:」をURLエンコードなどでエスケープすればいいですね。


4:[完了] ダンサー [2002/09/07 22:13 ]

わかりました。
回答を下さった方々ありがとうございました
http:だから:で分離されることがわかりました


5:[質問] ダンサー [2002/09/07 23:21 ]


すみませんURLのデコードなのですが
$value =~ s/([^0-9A-Za-z_])/"%" . unpack("H2",$1)/ge;
    $value =~ tr/ /+/;
↑でいいのでしょうか?
どこに入れればいいのでしょうか?


6:[回答] TOM neko [2002/09/08 00:28 ]

それはデコードでなくエンコードですが、$cookに値を入れる前ならどこでもOK。
$answer{'url'} =~ s/([^0-9A-Za-z_])/"%" . unpack("H2",$1)/ge;
$value =~ tr/ /+/; は、いらないです。
%answerすべてエンコードするなら、それぞれの値を入れた直後がいいでしょう。

デコードの方は、
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
で、URLしかエンコードしないのなら$COOKIE{'url'}に値が入ってからだし、他の$valueもエンコードしたなら$COOKIE{$name} = $value;の前ですね。


7:[完了] ダンサー [2002/09/08 07:05 ]

ありがとうございましたやってみます


8:[質問] ダンサー [2002/09/08 11:12 ]

$answer{'url'} =~ s/([^0-9A-Za-z_])/"%" . unpack("H2",$1)/ge; #エンコード

$cook="name\:$answer{'name'}\,mail\:$answer{'mail'}\,pwd\:$answer{'pwd'}\,url\:$answer{'url'}\,hito\:$answer{'hito'}";
    print "Set-Cookie: ATUO=$cook; expires=$date_g\n";
    $COOKIE{'name'} = $answer{'name'};
    $COOKIE{'mail'} = $answer{'mail'};
    $COOKIE{'pwd'} = $answer{'pwd'};
    $COOKIE{'url'} = $answer{'url'}  =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;#デコード
#~ s/%([fA-a-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
    
    $COOKIE{'hito'} = $answer{'hito'};

としたのですがデコードすると数字に変換されてしまいます。
なぜでしょうか?


9:[回答] TOM neko [2002/09/08 14:54 ]

> $COOKIE{'url'} = $answer{'url'} =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
これで$COOKIE{'url'}に入るのは置換に成功した回数。


10:[質問] ダンサー [2002/09/08 19:37 ]

TOM nekoさん何回もありがとうございます。
おかげでできるようになりました。
またこのクッキーのことなのですがまた新たな問題が
あります。
↑のクッキー取得のときに
$cookiesがファイルに書き出すとなにもはいっていないときがあるのですがなぜでしょうか?
発行の時は絶対クッキーが発行されているのですが
環境変数から取得できないときがあります
だからクッキーが取得できないときがあります。
常に取得するにはどうしたらよいのでしょうか?


11:[回答] TOM neko [2002/09/08 21:11 ]

訪問者がcookieを拒否したか、あとから消してしまったか、cookieを使わないクライアントでアクセスすると取得できませんが、その他の理由はわかりません。


12:[質問] ダンサー [2002/09/08 22:33 ]

TOM nekoさんありがとうございます

今自分のパソコンで動作テストしているのですが
Apacheでちょこっといじったのが原因なのか
ちょっとわかりませんがう〜んなにが原因なのでしょう。


13:[完了] ダンサー [2002/09/10 22:02 ]

やはりあとから消していたみたいです。
どうもお世話様でした。
他のプログラムミスでした。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World