劇ぱわ 不具合対策

クッキーの文字化け

状況及び原因

劇ぱわはクッキー(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
Take it easy !

『旧:野良猫のCGI講座』

以前の『野良猫のCGI講座』をご覧になりたい方は、『旧:野良猫のCGI講座』からアクセスして下さい。
但し、更新は一切していません。

ページのトップへ戻る