2023年7月21日金曜日

JavaScript: Cookie値取得関数を作ったときつまずいた3点

問題点1: Cookieをsplit()で配列にするとCookie名で値の取得ができなくなる。

解決方法: Cookieを取得して、";" でsplitではなく、"; " (半角スペース付)でsplitする。
let cookie_arry = document.cookie.split('; ');

参考【JavaScript】Cookieをsplit()で配列にするとCookie名で値の取得ができなくなるhttps://into-the-program.com/javascript-cant-get-value-cookie-name-array/


問題点2: forEachの仕様上、以下のように forEach内でreturnができない。
function getCookieValue(cookie_name) {
  let cookie_arry = document.cookie.split('; ');
cookie_arry.forEach(function(value) {
var content = value.split('='); if (content[0] == cookie_name){ return content[1]; //ここで終了せず、配列最後まで繰り返してしまう。 } }) }

解決方法: ふつうにforを使う。
function getCookieValue(cookie_name) {
  let cookie_arry = document.cookie.split('; ');
for (let value of cookie_arry) {
content = value.split('='); if (content[0] == cookie_name){ return content[1]; } } }

JavaScriptのArray.forEachをbreak、continue、returnさせたい
https://www.deep-rain.com/programming/javascript/778


問題点3: なぜか値を取得できないCookieが一部ある。
解決方法: HttpOnly属性のCookieはJavaScriptで取得できないので無理。

特にログインが必要なサイトで、ログイン後に生成される sessionid等のCookieが undefinedになってしまう。
getCookieValue('sessionid'); //⇒ undefined
これらのCookieをブラウザのデベロッパーツールで確認すると、HttpOnlyが有効になっている。
HttpOnly属性とは、クライアント側でJavaScriptなどからアクセスできないようにするもので、クロスサイトスクリプティング(XSS)攻撃などでCookieの内容を読み取られるのを阻止することができる。そのため、セッションIDなどはHttpOnlyが有効になっている場合が多い。

0 件のコメント:

コメントを投稿