document.cookieとは？

# この場所からアクセスできるすべてのクッキーを読む
```js
allCookies = document.cookie;
```
>上記のコードで allCookies は、`セミコロンで区切られたクッキーのリスト`です (つまり key=value のペア)。 なお、それぞれのキーおよび値の周囲にはホワイトスペース（空白やタブ文字）をおくことができます。実際のところ、RFC 6265 ではそれぞれのセミコロンの後に空白 1 文字を入れることを必須としていますが、一部のユーザーエージェントはこれに従っていません。

https://developer.mozilla.org/ja/docs/Web/API/Document/cookie#%E3%81%93%E3%81%AE%E5%A0%B4%E6%89%80%E3%81%8B%E3%82%89%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC%E3%82%92%E8%AA%AD%E3%82%80

#### `セミコロンで区切られたクッキーのリスト`です (つまり key=value のペア)とは？

```js
document.cookie

'_gid=************; _gat_gtag_UA_36116321_5=****; _ga_PWTK27XVWP=*******************; _ga=***********'
```
* セミコロンで区切られている
* 文字列で返される

# 新しいクッキーを書き込む
```js
document.cookie = newCookie;
```
>上記のコードで、 `newCookie は key=value の形式の文字列`であり、クッキーを設定したり更新したりします。なお、`この方法を使用して一度に設定・更新できるクッキーは、一つだけ`です。次のことも考慮してください。
>
>* オプションとして次に挙げる値を設定することができます。 `key と value のペアの後にセミコロンで区切って設定することで、クッキーを設定・更新`することができます。
>
>   * ;domain=ドメイン (例えば、 example.com または subdomain.example.com): クッキーが送信されるホストです。 指定されなければ、これは現在の文書の場所のホスト部分を既定とし、クッキーは`サブドメイン`では利用できません。 `ドメインが指定されれば、サブドメインも常に含まれます`。 初期の仕様とは対照的に、`ドメイン名の前のドットは無視されます`が、ブラウザーはその様なドットを含む`クッキーの設定を辞退する`ことができます。

https://developer.mozilla.org/ja/docs/Web/API/Document/cookie#:~:text=%E6%96%B0%E3%81%97%E3%81%84%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC%E3%82%92%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80,%E8%BE%9E%E9%80%80%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

#### サブドメインとは？

https://shop-pro.jp/yomyom-colorme/72260#:~:text=%E3%82%B5%E3%83%96%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A8%E3%81%AF%E3%80%81%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A8%E3%81%AF%E5%88%A5%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AB%E3%80%81%E6%9C%AC%E4%BD%93%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E5%85%83%E3%81%AB%E4%BB%BB%E6%84%8F%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%90%8D%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82%0A%E3%80%8C%E2%97%8B%E2%97%8B%E2%97%8B.com%E3%80%8D%EF%BC%88%E7%8B%AC%E8%87%AA%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%EF%BC%89%E3%82%92%E6%9C%AC%E4%BD%93%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A8%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%80%81%E3%80%8C%E2%96%B3%E2%96%B3%E2%96%B3.%E2%97%8B%E2%97%8B%E2%97%8B.com%E3%80%8D%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%9C%AC%E4%BD%93%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AE%E5%85%88%E9%A0%AD%E3%81%AB%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E6%8C%BF%E5%85%A5%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%8C%E3%82%B5%E3%83%96%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%E3%82%B5%E3%83%96%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AF%E3%81%B2%E3%81%A8%E3%81%A4%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB%E4%BD%BF%E3%82%8F%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%A4%9A%E3%81%84%E3%81%A7%E3%81%99%E3%80%82
* `ドメインが指定されれば、サブドメインも常に含まれます`とは?
* `クッキーはサブドメインでは利用できません`とはどうしてだろうか？

```js
// この例では `SameSite=None;` を設定しますが、これはこの例がオリジン間で
// 動作する必要があるからです。
// `SameSite` 属性は設定しない方が一般的です。この場合、既定値として
// `SameSite=Lax;` が設定されます。
document.cookie = "name=oeschger; SameSite=None; Secure";
document.cookie = "favorite_food=tripe; SameSite=None; Secure";

function showCookies() {
  const output = document.getElementById("cookies");
  output.textContent = `> ${document.cookie}`;
}

function clearOutputCookies() {
  const output = document.getElementById("cookies");
  output.textContent = "";
}
```
https://developer.mozilla.org/ja/docs/Web/API/Document/cookie#:~:text=//%20%E3%81%93%E3%81%AE%E4%BE%8B%E3%81%A7%E3%81%AF%20%60SameSite%3DNone%3B%60%20%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C,cookies%22)%3B%0A%20%20output.textContent%20%3D%20%22%22%3B%0A%7D

# セッションハイジャックにも使われる

>Example 2
Cross-site script attack
The attacker can compromise the session token by using malicious code or programs running at the client-side. The example shows how the attacker could use an XSS attack to steal the session token. If an attacker sends a crafted link to the victim with the malicious JavaScript, when the victim clicks on the link, the JavaScript will run and complete the instructions made by the attacker. The example in figure 3 uses an XSS attack to show the cookie value of the current session; using the same technique it’s possible to create a specific JavaScript code that will send the cookie to the attacker.
>```html
><SCRIPT>
>
>alert(document.cookie);
>
></SCRIPT>
>```
https://owasp.org/www-community/attacks/Session_hijacking_attack#:~:text=Example%202,document.cookie)%3B%0A%0A%3C/SCRIPT%3E