• 締切済み

下のCookieの質問に関しまして補足です その2

さらに調べていたのですが、どうやら登録されているURLのデータに「=」が含まれていると 上手くいかないことが解りました。 以下のスクリプトで保存及び抽出データに「=」が含まれていても上手く処理する方法は無いでしょうか。 #***************************************************************************** sub plink{ #パーソナルリンク &error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink); my ($a1,$a2,$a3,%temphash); for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){ ($a2,$a3) = split(/=/,$a1); $a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; if ($a2 eq 'plink_list'){ foreach(split(/<>/,$a3)){ $temphash{$_}=1; } last; } } &filelock("linkdata"); open (IN,"$linkdata"); while(<IN>){ if ($temphash{(split(/<>/,$_))[15]}){ $totalct++; push(@site,$_) if ($totalct >= $startnum) && ($totalct <= $endnum); } } close (IN); &fileunlock("linkdata"); $endnum = $totalct if $totalct < $endnum; $startnum = 0 if $totalct == 0; $action = "パーソ\ナルリンク"; &searchbar("","<option value=\"\" selected>$searchtitle\n"); &databar(); if ($totalct != 0){ $resultmessage = "$totalct件のリンクが登録されています。<br /><br />"; &linkbar("act=$act&line=$line&indi=$indi"); &siteindicate("",@site); }else{ $resultmessage = "登録が無いか、クッキーが有効になっていません。<br /><br />"; $linkbar = $siteindicate = ""; } &html_output; } #***************************************************************************** sub plink_add{ #パーソナルリンク追加 &error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink); &get_cookie; $plink_list.=$url."<>" if $plink_list !~ /\Q$url\E/; &set_cookie; &searchbar("","<option value=\"\" selected>$searchtitle\n"); $linkbar = $siteindicate = ""; $action = "パーソ\ナルリンク追加"; $resultmessage = "<b>".&sitename_get."</b> をパーソ\ナルリンクに追加しました。<br />"; &html_output; } #***************************************************************************** sub get_cookie{ #クッキー取得 my ($a1,$a2,$a3); for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){ ($a2,$a3) = split(/=/,$a1); $a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; if ($a2 eq 'plink_list'){ $plink_list = $a3; last; } } } #****************************************************************************** sub set_cookie{ #クッキー設定 $plist_link =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "Set-Cookie:plink_list=$plink_list; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n"; } #**************************************************************************** 宜しくお願い致します。

みんなの回答

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.1

サイトを運営するってなら 自分で保守すべきだと思うのだが・・・ >以下のスクリプトで保存及び抽出データに「=」が含まれていても上手く処理する方法は無いでしょうか。 みてわかるように,セットしたCookieが項目の区切りとして 「=」を使ってて,それを解読するのに「=」でsplitしてるから URLに「=」があれば誤動作するのは自然なこと. #ついでにいうとexpireの日付が決めうちなのも個人的には・・・ だから区切りにURLでは使わないものを使って それでsplitすればいいんでしょう. セットするCookieのデータ構造を考え直すしかないんでは?

das_horn
質問者

お礼

ご回答ありがとうございます。 その後、さらに調査していたのですが、登録URLデータに記号の「=」及び「&」が 含まれる場合に不具合が発生することが解りました。 取り敢えずの応急処置として、上記の場合にはパーソナルリンクを 使用できないようにして対応しました。 ありがとうございました。

関連するQ&A