我必须在提出请求时检查cookie是否存在。问题是Cookie值在其中具有“=”,例如
...;用户名=名字=相约; ....
此处cookie名称为“username”,cookie值为“firstName = Meet”。问题是当我尝试从document.cookies获取cookie时。我使用split函数为“;”爆炸结果后得到所有的cookie。
为了获取值,我将每个值爆炸/拆分为“=”,那么此cookie值将一直到firstName。
任何想法都可以作为firstName = Meet来获得全部价值。
感谢, 满足
答案 0 :(得分:2)
// when you get a cookie string:
unescape(cookieData);
// when you set a cookie string:
escape(yourString);
答案 1 :(得分:0)
如果在服务器端设置了cookie,则需要对该值进行urlencode,就像它是一个查询字符串一样。如果您正在使用带有setcookie的PHP,那么这应该是自动完成的。实际上,任何体面的库都应该自动为你编码cookie值。
将cookie值设置为username = firstName = Meet的唯一方法是,如果您手动发送Set-Cookie标头。
如果您首先提供有关如何设置cookie的更多信息,那么这将有助于提供更准确的答案。
答案 2 :(得分:0)
从document.cookies中以已知格式查找单个cookie有一些替代方法。这是使用正则表达式的简化案例。
var expr = /(?:^|; )username=([^;]+)/i; //match "username=some_string_that_string_may_have_more=_in_it". Capture the part after the leading =. Does not capture the trailing ;
var cookie_match = document.cookie.match(expr);
var cookie_val;
if (cookie_match) {
cookie_val = cookie_match[1];
}
//result should be cookie_val = "firstName=Meet"
你当然可以通过拆分document.cookie获得所有的cookie,如上所述,如果你正在捕获大量的cookie或编写一个cookie访问包装,那么这是一个好主意。请记住,使用子cookie时,cookie将如下所示:
cookiename=cookiekey=cookievalue&key2=val2;
您希望使用正则表达式或slice / indexOf来确保您只在第一个等号上拆分每个cookie。然后,如果您想要详细程度,可以先在&
然后在=
上拆分来获取单个名称/值对。