不具合修正/クッキーに保存できない文字への対応
https://sos2wiki.chimata.org/?%E4%B8%8D%E5%85%B7%E5%90%88%E4%BF%AE%E6%AD%A3/%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E6%96%87%E5%AD%97%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C概要 †
MastersBar/6においてクッキーの読み書きに関する不具合が投稿されました。
この不具合に対処する一方法として、クッキーへの保存形式を変更する方法を記載します。
保存形式 †
各値を16進数に変換したものをクッキーに保存するようにします。
また、既存データとの互換性のため、変換したデータであることを識別できるようにプレフィックスとして">"を付加します。
例 | |
---|---|
変更前 | SOS2=name:サンプル,pass:sample,id:0000 |
変更後 | SOS2=name:>835483938376838b,pass:>73616d706c65,id:>30303030 |
変更内容 †
- 設定部分の変更
以下を追加します。$cookie_trans_prefix = '>'; # 変換されていることを表すプレフィックス
- sub cookie_getの変更
この部分を以下のように変更します。$COOKIE{$name} = $value;
$COOKIE{$name} = $cookie_trans_prefix eq substr($value, 0, length($cookie_trans_prefix)) ? pack('H*', substr($value, length($cookie_trans_prefix))) : $value;
- sub cookie_setの変更
この部分を以下のように変更します。$cook="name\:$Fm{'name'}\,pass\:$Fm{'pass'},id\:$Fm{'id'}";
$cook = "name:${cookie_trans_prefix}" . unpack('H*', $Fm{'name'}) . ",pass:${cookie_trans_prefix}" . unpack('H*', $Fm{'ps'}) . ",id:${cookie_trans_prefix}" . unpack('H*', $Fm{'id'});
補足 †
- この方法では単純に16進数に変換しているだけですのでJavaScript?との相性が悪いです。
- idの値はそのままでも良いのですが統一感をとるためだけの理由で変換してあります。
コメント †
コメントはありません。 Comments/不具合修正/クッキーに保存できない文字への対応?
Last-modified: 2019-04-30 (火) 00:57:42 (718d)