Javascript使って自力パースしている場合はパースロジックを見直すこと
let cookies = document.cookie.split(';');
cookies.map((value) => {
let content = value.split('=');
if (content[0] === 'iwantu') {
// do something use 'iwantu'
console.log("I got :", content[1])
};
});
このコードで iwantu が取れる場合は、
そのクッキーがクッキー文字列の先頭にある場合のみ、前に他のクッキーが存在する場合、
謎の?スペースが挿入されて、 === 評価では取れない
なぜ?
document.cookieを叩いて見てみる
"iwantu=ineedu; foo=bar; hoge=piyo"
さっきのロジックを追ってみる、まずsplit(';')を実行すると
cookies[0] = "iwantu=ineedu"
cookies[1] = " foo=bar"
cookies[2] = " hoge=piyo"
スペースも文字列の一種なわけで、あくまで *;*でsplitしているわけだから、
当然この時点でスペースが入る
なので、比較するときに、一旦空白を取り除いてからが良いかと
(
そもそもcookieの値に空白を入れる "a k b=48"みたいなケースは想定しません
これってcookieとして正しいのか? はさておき
)
改良版
let cookies = document.cookie.split(';');
cookies.map((value) => {
//一回スペースを取り除く
let content = value.split('=');
if (content[0].trim(" ") === 'iloveu') {
// do something use 'iloveu'
console.log("I got :", content[1])
};
});
これで取れる