劇ぱわ 不具合対策
クッキーの文字化け
状況及び原因
劇ぱわはクッキー(cookie)を利用して「なまえ」「パスワード」の入力を省いてくれますが、「なまえ」が『?O?L』なんて表示されてしまう場合があります。
原因は、劇ぱわを設置したサーバーのOSが「Windows」で尚且つ「Apache2.0.49」を使用している場合に起きるようです。
あなたが使用しているパソコンのOSは関係ありません。
ここに記載する「クッキーの文字化け」対策は、「Windowsサーバー+Apache2.0.49」の組み合わせに対する対策です。
それ以外の要因による文字化けには、効果がない場合がありますので御了承下さい。
確認して下さい
・「劇ぱわ」を設置したサーバーのOSが「Windows」なのか。
・「Apache2.0.49」を使用しているのか。
↓
・サーバーの規約・仕様をチェックする。
・サーバーの管理者に問い合わせてみる。
対策方法
gekipawa.cgiの後半に
##### クッキーの発行
sub set_cookie{
$ENV{'TZ'} = "GMT"; # 国際標準時を取得
(省略)
$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
$cook="pass<>$form{'pass'}\,saku<>$form{'saku'}\,home<>$form{'home'}";
print "Set-Cookie: BASEBALL=$cook; expires=$date_gmt\n";
}#end set_cookie
##### クッキーを取得
sub get_cookie{
@pairs = split(/;/, $ENV{'HTTP_COOKIE'});
(省略)
$c_pass = $COOK{'pass'};
$c_saku = $COOK{'saku'};
$c_home = $COOK{'home'};
if ($in{'pass'}){ $c_pass = $in{'pass'}; }
if ($in{'saku'}){ $c_saku = $in{'saku'}; }
if ($in{'home'}){ $c_home = $in{'home'}; }
}#end get_cookie
という部分があります。これを
##### クッキーの発行
sub set_cookie{
$ENV{'TZ'} = "GMT"; # 国際標準時を取得
local($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg)=localtime(time+30*24*60*60);
$yearg += 1900;
if ($secg < 10) { $secg = "0$secg"; }
if ($ming < 10) { $ming = "0$ming"; }
if ($hourg < 10) { $hourg = "0$hourg"; }
if ($mdayg < 10) { $mdayg = "0$mdayg"; }
$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
$ENV{'TZ'} = "Japan";
$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
#エンコード
$saku2 = $form{'saku'}; #エンコードするものとしないものを分ける、
$saku2 =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
$cook="pass<>$form{'pass'}\,saku<>$saku2\,home<>$form{'home'}";
print "Set-Cookie: BASEBALL=$cook; expires=$date_gmt\n";
}#end set_cookie
##### クッキーを取得
sub get_cookie{
@pairs = split(/;/, $ENV{'HTTP_COOKIE'});
foreach (@pairs) {
local($key,$val) = split(/=/);
$key =~ s/\s//g;
$GET{$key} = $val;
}
@pairs = split(/,/, $GET{'BASEBALL'});
foreach (@pairs) {
local($key,$val) = split(/<>/);
$COOK{$key} = $val;
}
# デコード
$COOK{'saku'} =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
$c_pass = $COOK{'pass'};
$c_saku = $COOK{'saku'};
$c_home = $COOK{'home'};
if ($in{'pass'}){ $c_pass = $in{'pass'}; }
if ($in{'saku'}){ $c_saku = $in{'saku'}; }
if ($in{'home'}){ $c_home = $in{'home'}; }
}#end get_cookie
の様に赤字部分を追加・修正します。
※この修正は、BBSなど他のCGIにも有効です。
前後の内容
| 劇ぱわ | ||||
| セキュリティ対策← | 不具合対策 | →改造方法 | ||
| 設定の初期化← | クッキーの文字化け | →キャンプ画面が 正常に表示されない | ||
【劇ぱわ改造設置支援サイト】Take it easy ! RYOQUEST presents
『野良猫のCGI講座』は、
【劇ぱわ改造設置支援サイト】Take it easy ! RYOQUEST presents のコンテンツとして、虎猫が公開しています。
「劇空間ぱわふるリーグ2 ver 3.00b(劇ぱわ)」は、
『きままなまま』で管理人にーやん様が作成・無料配布されているCGI/Perlによる野球ゲームです。
参考にされた方は、当サイトへリンクを貼って下さい♪
サイト名:Take it easy ! RYOQUEST presents
(サイト名:Take it easy !)
URL:http://ryoquest.sakura.ne.jp/
バナーURL:http://ryoquest.sakura.ne.jp/image/tie_8831an.gif
![]()
『旧:野良猫のCGI講座』
以前の『野良猫のCGI講座』をご覧になりたい方は、『旧:野良猫のCGI講座』からアクセスして下さい。
但し、更新は一切していません。