我有一个关于java验证cookie的问题。我经历了RFC standards for internet cookie 教程并查看预定义的正确语法。现在我有一些带有一些cookie示例的java代码,我想应用正则表达式来判断给定的cookie是否有效。下面是我的代码和我申请的正则表达式:
代码段:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CheckValidity
{
public static boolean IsValid(String mycookie)
{
boolean valid = false;
String pattern="^Set-Cookie:\\s\\*?\\=\\*?\\;\\^Expires=\\^Path=\\^Domain=.*\\^Max-Age=[1-9]\\d*$\\HttpOnly";
Pattern p= Pattern.compile(pattern);
Matcher m=p.matcher(mycookie);
for (int k=0; k<mycookie.length();k++)
{
if(m.find())
{
valid=true;
return valid;
}
else
{
valid=false;
return valid;
}
}
return valid;
}
public static void main(String[] args) {
String [] examples = {
// valid examples: 1 to 7
"Set-Cookie: ns5=", // 1 valid: value is empty
"Set-Cookie: ns5=\"alss/0.asdf^\"", // 2 valid: name=value
"Set-Cookie: ns5=\"alss/0.asdf^\"; Expires=Tue, 15 Jan 2006 14:24:53 GMT", // 3 valid: Expires=arbitrary time
"Set-Cookie: ns5=; Domain=", // 4 valid: empty domain
"Set-Cookie: ns5=; Domain=.srv.a.com-0", // 5 valid: Domain=host_name
"Set-Cookie: ab=Asdfa; Expires=Sat, 15 Jan 2006 14:24:53 GMT; Path=/; Domain=.example.com; HttpOnly", //6 Valid
"Set-Cookie: ns5=alss/0.asdf^; HttpOnly", // 7 valid
"Set-Cookie: ns5=alss/0.asdf^; httponly", // 8 invalid H and O should be capital
"Set-Cookie:", // 9 invalid empty
"Set-Cookie: bv", // 10 invalid cookie-pair: missing '='
"Set-Cookie: =alss/0.asdf^", // 11 invalid cookie-pair: name is empty
"Set-Cookie: ns@5=alss/0.asdf^", // 12 invalid cookie-pair: name is invalid
"Set-Cookie: ns5=alss/0.asdf^;", // 13 invalid redundant ';' after ^
"Set-Cookie: ns5=; Expires=Tue 15 Jan 2006 14:24:53 GMT", // 14 invalid Expires missing ',' after Tue
"Set-Cookie: ns5=alss/0.asdf^; Max-Age=06", // 15 invalid Max-Age: starting 0
"Set-Cookie: ns5=alss/0.asdf^; Domain=.0com", // 16 invalid Domain: starting 0
"Set-Cookie: ns5=alss/0.asdf^; Domain=.com-", // 17 invalid Domain: trails non-letter-digit
"Set-Cookie: ns5=alss/0.asdf^; Path=", // 18 invalid Path: empty
};
for (int i = 0; i < examples.length; i++)
System.out.println(String.format("Cookie %d: %s", i+1, IsValid(examples[i]) ? " is valid" : "is invalid"));
}
}
老实说,之前我没有使用正则表达式,所以我阅读了一些教程,然后应用了我当前的正则表达式。我认为在我的正则表达式中有一些我想念的情况,特别是AND
和OR
运算符,但我无法找到正确的语法。如果可能的话,你能告诉我应该如何使正则表达式符合cookie标准,并且第一到第七检索“有效”,剩下的那些“无效”。我非常感谢你的帮助。提前谢谢!