tomcat 7にクッキーを中国語に書き込んでControl character in cookie value or attribute異常を起こす

2027 ワード

詳細
ローカルテストに合格したプログラムがテスト環境に配備されると、ログイン名が中国語の場合、次のような異常が発生しますが、英字または数字のログイン名は正常で、異常情報は次のとおりです.
 
 
java.lang.IllegalArgumentException: Control character in cookie value or attribute.   
    at org.apache.tomcat.util.http.CookieSupport.isV0Separator(CookieSupport.java:155)   
    at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:323)   
    at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:157)   
    at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:98)   
    at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:913)   
    at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:683)   
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:400)   
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)   
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)   
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)   
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)   
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)   
    at java.lang.Thread.run(Thread.java:662)  

 
 
上記の異常提示検査コードに基づき、ローカルでN回繰り返しテストしたが、すべて正常で、異常は常にローカルで再現できないことを発見した.その後、テストサーバー環境はローカル開発環境とは異なり、テストサーバーTomcatは7.0バージョンで、ローカル開発環境tomcatは6.0で、環境が統一されていないと様々な奇妙な異常が発生することを発見した.ここで開発環境、テスト、正式な環境のソフトウェアのバージョンはきっと統一します!!!
 
また、Tomcat 7に行ってから再度テストを行い、異常が再現された.デバッグにより、ログイン時にCookieを使用してユーザーのログイン情報を保存する必要があるため、Tomcat 7ではcookieの中国語へのサポートが不十分で、直接中国語文字のログイン名をcookieに書き込むと異常を引き起こすことが分かった.
 
通常の書き込みは終わりではありません.この場合、バックグラウンドでクッキー値を解析するコードが取った値は乱符号化されているので、クッキーを使用するとログインできません.これは,バックグラウンドでクッキー登録を検証する場合,取得したクッキー値をUTF-8形式に変換した後,比較データベースで登録情報が正しいかどうかを確認する必要がある.