替换 cookie 值上的逗号字符
replace comma characters on cookie value
我正在将 Web 应用程序从 .NET 迁移到 Java 平台,我必须处理遗留的格式错误的 cookie。我需要读取一个以逗号分隔的值的 cookie,正如 this other question 中所解释的那样,它是无效的。当我尝试从 HttpServletRequest 读取时,它只给了我逗号分隔列表中的第一个值。
我最后一个解决这个问题的方法是使用 mod_rewrite.
从 apache 服务器修改 cookie 值
由于我是 apache 配置的新手,我没有找到用另一个字符替换所有逗号的正确方法。
我最好的方法是用这种方式替换 9 个逗号,或 8 个逗号...或 1 个逗号:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9|%10:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2:dev.server.intranet:43200]
我认为它丑陋且不完整,因为如果逗号分隔列表的长度超过 10 个值,则需要额外调用才能完全修复。
我一直在尝试使用 Next [N] 标志进行迭代,直到没有逗号为止,但它没有用。
我一直在寻找 mod_headers,但我认为我遇到了同样的迭代问题。
终于找到了解决办法:
RequestHeader edit* Cookie "(,)" "|"
有了这个,所有 cookie 中的所有逗号都将被替换为“|”特点。
我正在将 Web 应用程序从 .NET 迁移到 Java 平台,我必须处理遗留的格式错误的 cookie。我需要读取一个以逗号分隔的值的 cookie,正如 this other question 中所解释的那样,它是无效的。当我尝试从 HttpServletRequest 读取时,它只给了我逗号分隔列表中的第一个值。
我最后一个解决这个问题的方法是使用 mod_rewrite.
从 apache 服务器修改 cookie 值由于我是 apache 配置的新手,我没有找到用另一个字符替换所有逗号的正确方法。
我最好的方法是用这种方式替换 9 个逗号,或 8 个逗号...或 1 个逗号:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9|%10:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2:dev.server.intranet:43200]
我认为它丑陋且不完整,因为如果逗号分隔列表的长度超过 10 个值,则需要额外调用才能完全修复。
我一直在尝试使用 Next [N] 标志进行迭代,直到没有逗号为止,但它没有用。
我一直在寻找 mod_headers,但我认为我遇到了同样的迭代问题。
终于找到了解决办法:
RequestHeader edit* Cookie "(,)" "|"
有了这个,所有 cookie 中的所有逗号都将被替换为“|”特点。