cookieがどうやって登録されるのか調べてみた
Webサイトにアクセスするとよく出てくるcookieですが、その仕組みについてはあまり理解ができておらず、実際にcookieがどうやってブラウザに登録されるものなのか確認してみました。
Cookieに関する基礎知識
Cookieは、ユーザーのブラウザに保存される小さなデータ片であり、ウェブサイトがユーザーの情報を記憶するために使用されます。Cookieは、セッション管理、ユーザー追跡、カスタマイズされたユーザー体験の提供などに利用されます。Cookieには以下の属性があります:
• 名前:Cookieの名前
• 値:Cookieに格納されるデータ
• 有効期限:Cookieの有効期限
• パス:Cookieが有効なURLパス
• ドメイン:Cookieが有効なドメイン
• セキュア属性:HTTPS接続でのみCookieを送信するかどうか
• HttpOnly属性:JavaScriptからアクセスできないようにするかどうか
• SameSite属性:クロスサイトリクエスト時にCookieを送信するかどうか
Docker ComposeでApacheとPHPの環境をセットアップ
docker-compose.yamlとDockerfileを準備
まず、docker-compose.yamlファイルとDockerfileを準備します。これにより、ApacheとPHPの環境を簡単にセットアップできます。
Dockerfileの準備
FROM php:8.0-apache
RUN docker-php-ext-install pdo pdo_mysql && \
apt-get update && \
apt-get install -y libpng-dev
COPY . /var/www/html
CMD ["apache2-foreground"]
docker-compose.yamlの準備
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
networks:
- app-network
networks:
app-network:
driver: bridge
上記のファイルを同じディレクトリに入れ、次に、Docker Composeを使用して環境を立ち上げます。
docker compose up -d
ApacheとPHPの環境が立ち上がり、ディレクトリのアクセス権限などを適切に設定することで、http://localhost:8080にアクセスできるようになります。
Cookieを反映させるサーバ側の設定
setcookie.phpの準備
setcookie.phpファイルを作成し、ブラウザにCookieを設定するスクリプトを記述します。
<?php
// Cookieの名前
$cookie_name = "user";
// Cookieの値
$cookie_value = "hoge hoge";
// 有効期限を設定(現在の時刻から30日後)
$expiry = time() + (86400 * 30); // 86400秒は1日
// Cookieを設定(secure, HttpOnly属性付き)
setcookie($cookie_name, $cookie_value, [
'expires' => $expiry,
'path' => '/',
'secure' => true, // secure属性
'httponly' => true, // HttpOnly属性
'samesite' => 'Strict' // SameSite属性(Lax, Strict, Noneのいずれかを指定)
]);
?>
setcookie()について
setcookie()関数は、以下の形式で使用されます:
setcookie($name, $value, [
'expires' => $expiry,
'path' => '/',
'domain' => '', // ドメインを指定する場合はここに記述
'secure' => true, // secure属性
'httponly' => true, // HttpOnly属性
'samesite' => 'Strict' // SameSite属性(Lax, Strict, Noneのいずれかを指定)
]);
• expires: Cookieの有効期限をUnixタイムスタンプで指定します。
• path: Cookieが有効なパスを指定します。デフォルトは/で、サイト全体で有効になります。
• domain: Cookieが有効なドメインを指定します。省略すると、現在のドメインになります。
• secure: trueにすると、CookieはHTTPS接続でのみ送信されます。
• httponly: trueにすると、JavaScriptからアクセスできなくなります。
• samesite: Strict, Lax, Noneのいずれかを指定し、クロスサイトリクエスト時のCookie送信を制御します。
クライアント側からアクセス
Secure属性がfalseの場合
secure属性をfalseに設定すると、HTTP接続でもCookieが登録されます。
setcookie($cookie_name, $cookie_value, [
'expires' => $expiry,
'path' => '/',
'secure' => false, // secure属性がfalse
'httponly' => true,
'samesite' => 'Strict'
]);
ブラウザでhttp://localhost:8080/setcookie.phpにアクセスすると、Cookieが登録されていることを確認できます。
Secure属性がtrueの場合
setcookie($cookie_name, $cookie_value, [
'expires' => $expiry,
'path' => '/',
'secure' => true, // secure属性がtrue
'httponly' => true,
'samesite' => 'Strict'
]);
ブラウザでhttp://localhost:8080/setcookie.phpにアクセスしても、Cookieが登録されないことが確認できます。
Secure属性がtrueの場合、HTTPS通信ではCookieが登録される
secure属性をtrueに設定し、HTTPS接続でアクセスすると、Cookieが正常に登録されます。HTTPSを有効にするためには、SSL証明書を設定し、Apacheの設定ファイルを編集する必要があります。
SSL証明書を設定し、ブラウザでhttps://localhost:8080/setcookie.phpにアクセスすると、Cookieが登録されていることが確認できます。
この記事が気に入ったらサポートをしてみませんか?