ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Cookie の設定
use Illuminate\Support\Facades\Cookie;
// 方法 A: レスポンスに直接付ける
return response('Hello')
->cookie('user_id', '123', 60); // 60 分間
// 引数: name, value, minutes, path, domain, secure, httpOnly, raw, sameSite
return response('Hi')
->cookie('locale', 'ja', 60 * 24 * 30, '/', null, true, true, false, 'Lax');
// 方法 B: Cookie::queue() で自動付与(最も手軽)
Cookie::queue('user_id', '123', 60);
Cookie::queue(Cookie::make('theme', 'dark', 60 * 24 * 365));
return view('home');
// 方法 C: Symfony 互換のオブジェクト生成
$cookie = cookie('token', 'abc', 60);
return redirect('/dashboard')->cookie($cookie);
// 永続化 (5 年など長期)
Cookie::queue('ga_id', $id, 60 * 24 * 365 * 5);
// 削除されないクッキー (forever)
Cookie::queue(cookie()->forever('ga_id', $id));
Cookie の取得
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
Route::get('/me', function (Request $request) {
// 方法 A: Request 経由
$id = $request->cookie('user_id');
// 方法 B: Cookie ファサード
$id = Cookie::get('user_id');
// 存在チェック
if ($request->hasCookie('user_id')) { ... }
// デフォルト値
$locale = $request->cookie('locale', 'ja');
return ['id' => $id];
});
Cookie の削除
// レスポンスに削除指示を乗せる
return response('logout')->withoutCookie('user_id');
// キューに削除を積む
Cookie::queue(Cookie::forget('user_id'));
// パスやドメインを限定する場合は同じ条件で削除
Cookie::queue(Cookie::forget('user_id', '/', '.example.com'));
EncryptCookies ミドルウェアと暗号化
Laravel はデフォルトで 全 Cookie を AES-256-CBC で自動暗号化します。フロントエンド JavaScript で生の値を読みたい Cookie(例: locale や Google アナリティクスの _ga)は $except に登録して暗号化対象から外します。
// app/Http/Middleware/EncryptCookies.php
class EncryptCookies extends Middleware
{
/**
* 暗号化しない Cookie 名のリスト
*/
protected $except = [
'locale',
'_ga',
'_gid',
'consent',
];
}
属性の意味(path / domain / secure / httpOnly / sameSite)
| 属性 | 意味 | 推奨 |
|---|---|---|
path | 送信対象パス | / |
domain | 送信対象ドメイン | サブドメイン共有なら .example.com |
secure | HTTPS のみ送信 | 本番では必ず true |
httpOnly | JS から読めなくする | セッション系は true(XSS 対策) |
sameSite | Cross-site 送信制御 | Lax 推奨、Cross-site 必要なら None; Secure |
セッション Cookie の設定(config/session.php)
// config/session.php
return [
'lifetime' => env('SESSION_LIFETIME', 120), // 分
'expire_on_close'=> false,
'encrypt' => false, // セッション本体は別に保管
'http_only' => true,
'same_site' => env('SESSION_SAME_SITE', 'lax'),
'secure' => env('SESSION_SECURE_COOKIE', null),
'cookie' => env('SESSION_COOKIE', 'laravel_session'),
'domain' => env('SESSION_DOMAIN', null),
'path' => '/',
];
// .env
SESSION_LIFETIME=120
SESSION_SAME_SITE=lax
SESSION_SECURE_COOKIE=true # 本番のみ
SESSION_DOMAIN=.example.com # サブドメイン共有
JavaScript から Cookie を読む例
// Laravel 側で暗号化対象から外す
protected $except = ['client_data'];
// Controller でセット
Cookie::queue('client_data', json_encode(['theme' => 'dark']), 60);// フロント側
function getCookie(name) {
const m = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
return m ? decodeURIComponent(m[2]) : null;
}
const data = JSON.parse(getCookie('client_data'));
console.log(data.theme);
よくあるトラブル
| 症状 | 原因 / 対処 |
|---|---|
| Cookie が保存されない | レスポンスが redirect 以外で先に echo していてヘッダ送出済 |
| JS で読めない(HttpOnly) | Laravel デフォルトが HttpOnly。手動で httpOnly を false にする |
| 値が文字列「eyJpdiI6...」になる | 暗号化されている。$except に追加 |
| Cross-site で送られない | SameSite=None + Secure 必須(HTTPS 必須) |
| サブドメイン間で共有できない | domain を .example.com(先頭ドット)に設定 |
FAQ
Q: 永続 Cookie(ブラウザ閉じても残る)の作り方
A: cookie()->forever('name', 'value')(5 年)または分単位で大きな値を指定。
Q: なぜ cookie() ヘルパーで設定しただけだと反映されない?
A: cookie() は Cookie オブジェクトを作るだけ。response()->cookie($cookie) でレスポンスに添えるか、Cookie::queue($cookie) で自動添付してください。
Q: GDPR 同意バナー用に「同意するまで Cookie を発行しない」を実現したい
A: Cookie::queue を消し、同意イベント受領後に再リクエストで発行。または同意 Cookie 以外を $except 外し AES 暗号化のままにして必須でないものは発行を控える。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?