8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cookieパースしたら謎のスペースが入っていた

Last updated at Posted at 2018-07-16

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])
      };
    });

これで取れる

/* 別にAKB好きではありません */

8
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?