クッキー / HTTP cookie

ブラウザにデータを保存する仕組みCookie

HTTPとは?

 状態:-  閲覧数:2,284  投稿日:2016-04-16  更新日:2016-04-28
サーバ/クライアント間の通信を担当
・ステートレス(状態を管理しない)なプロトコル
・リクエスト/レスポンスの一往復が完結された処理と見なされる

あるユーザーから送られてきた前回のリクエストと、今回のリクエストを関連付けることはできない
・次に発生したリクエストはまったく別物と認識される
→ 複数のページ間で情報を保持することができない


クッキーとは?


RFC 6265などで定義されたHTTPにおけるWebサーバとWebブラウザ間で状態を管理するプロトコル、またそこで用いられるWebブラウザに保存された情報

ブラウザにデータを保存する仕組み の一つ
・サーバサイドからクライアントに対して書き込める小さなテキスト

発行主体
・JavaScriptを用いてクライアント側で発行することも可能

利用目的
・ステートレス(状態を維持できない)なプロトコルであるHTTP上で、状態管理ができるようにすること
→ ユーザ識別やセッション管理を実現

仕組み
・クライアントは自分自身に保存されているCookie情報を、書き込み元のサーバへ対してリクエストする際、ヘッダ情報として送信

クッキー 仕様 / 格納­可能なクッキー総数とサイズ

 閲覧数:169 投稿日:2016-04-16 更新日:2016-04-25 

RFC 6265 — HTTP State Management Mechanism (日本語訳)


仕様
・1クッキーあたり,少なくとも 4096 バイト(クッキーの名前, 値, 属性 の長さの総和で)
・1ドメインあたり,少なくとも 50 個のクッキー
・全部で少なくとも 3000 個のクッキー

実際
・1つのCookieには4096バイトのデータを記録可能
・1台のサーバが同じコンピュータに対して発行できるCookieの数は20個に制限されている
・Cookieの総数は300個までで、これを超えると古い方から削除される


最新仕様と実際が異なる理由


クッキーに関するRFC仕様は複数存在
・最新ブラウザ制限に合わせると古いブラウザを使用している閲覧者に不具合が生じる
→ 規格化された一番古い RFC2109 の6.3の記述に即している
・最低 300 個のクッキー
・ひとつのクッキーあたり最低4096バイト (Set-Cookieの構文規則における、cookie非終端子を構成する文字のサイズで数える)
・個別のホストまたはドメイン名ごとに最低20個
     * at least 300 cookies

     * at least 4096 bytes per cookie (as measured by the size of the
       characters that comprise the cookie non-terminal in the syntax
       description of the Set-Cookie header)

     * at least 20 cookies per unique host or domain name


※1024バイト = 1KB なので、4096 バイト = 4KB


Cookieの問題点

 閲覧数:151 投稿日:2016-04-18 更新日:2016-04-18 

Cookieの問題点


クライアントサイドで管理される
・内容の改竄が可能
・通信途中でデータが盗聴される可能性がある
・認証情報のようにセキュリティに関わる情報を保持する用途には不向き






Cookie 属性

 閲覧数:144 投稿日:2016-04-18 更新日:2016-04-22 

secure属性


HTTPSの通信時のみクッキーを送信
・指定されていないと,暗号化されていない通信経路上にクッキーが送信されてしまい,盗聴される危険がある


expires属性


クッキーの有効期限を指定

指定がある場合
・指定された日時までクッキーを送信
・指定された日時までファイル上に保存され,ブラウザ再起動後もその値が読み込まれ使用される

指定がない場合
・有効期限はブラウザが終了するまで


domain属性


ブラウザがクッキーを送信するサーバーのドメイン名
・ブラウザがアクセスするURL内のドメイン名がこれに後方一致(一部制限がある)する場合のみクッキーを送信する
・後方一致しない場合はブラウザにセットしない
・省略した場合は,アクセスしたURLに含まれるホスト名が使用される

そのCookieの生成元サーバを内包するスコープを指定しない場合、無視される
・example.comから受信されたCookieのDomain属性にyahoo.co.jpが指定されている場合、これは無視される


path属性


ブラウザがクッキーを送信するサーバーのパス
・ブラウザがアクセスするURL内のパスがこれに前方一致する場合のみクッキーを送信する
・前方一致しない場合はブラウザにセットしない
・省略した場合は,アクセスしたURLに含まれるパスが使用される

アクセスしようとしているURLがhttp://example.co.jp/pathの場合
・そのURLから発行されたクッキーがブラウザにより自動送信される


Cookieの有効期限


Max-Age属性もExpires属性も指定されていない場合
・ブラウザを閉じるタイミングでCookieが消滅する

HTTP ヘッダ / クッキー

 閲覧数:203 投稿日:2016-04-19 更新日:2016-04-22 

HTTP ヘッダにおけるクッキー


一覧表
ヘッダフィールド名 説明 ヘッダ種別 方向 段階
- 初回リクエストではクッキーを付与しない リクエスト 1回目
Set-Cookie 状態管理開始のためのCookie情報 レスポンス 1回目以降
Cookie サーバから受け取ったCookie情報 リクエスト 2回目以降


HTTP レスポンスヘッダ


Set-Cookie構文
・HTTPレスポンスヘッダを出力する際、Set-Cookieヘッダを含めてCookie情報をクライアントへ送信
・Set-Cookieヘッダは1回のレスポンスヘッダで複数使用可能

Set-Cookieレスポンスヘッダの構文
・Set-Cookieヘッダはコンマで区切られ、一つ以上のCookie属性を含む
・それぞれのCookie属性はセミコロン( ; )で区切られる
・「名前」属性はCookie属性の先頭に配置する必要がある
・その他の属性順番に決まりはない
Set-Cookie : 名前=値; expires=日付;
path=パス; domain=ドメイン名; secure

Set-Cookieヘッダフィールド
属性 説明
NAME=VALUE Cookieにつける名前とその値(必須)
Expires=DATE Cookieの有効期限(デフォルトはブラウザを閉じるまで)
Max-Age=DATE クッキーの残存期間を秒数で指定する。例えば
Max-Age=100

であれば100秒後に消滅する
Path=PATH Cookieの適用対象となるサーバ上のパス(デフォルトはドキュメントと同じパス)
Domain=DOMAIN Cookieの適用対象となるドメイン名(デフォルトはCookieを生成したサーバのドメイン名)
Secure HTTPSで通信している場合にのみCookieを送信するオプション
HttpOnly CookieをJavaScriptからアクセスできないように制限するオプション
仕組み
Cookieでセッション管理機能を実現

Cookieの仕組み / 処理の流れ

 閲覧数:180 投稿日:2016-04-19 更新日:2016-04-21 

用語


クライアント
・ブラウザ

サーバ
・Webアプリケーション


1.クライアント → サーバ


クライアントは、サーバへ対してリクエスト送信
・ユーザがリクエスト送信
・初回アクセスの場合、クライアントはCookieを持っていない
GET /index.html HTTP/1.1
Host:sakura.e1blue.co


2.サーバ


サーバは、Cookieとしてクライアントに保存して欲しい情報を、Set-Cookieフィールドの値として設定
・Cookieの中にはアクセス数を示す「visit=1」が含まれている
・レスポンスボディには、「訪問回数:1」で構築したHTMLを載せる
Set-Cookie: visit=1; path=/; expires=Wed, 10-Oct-12 07:12:20 GMT


3.サーバ → クライアント


サーバが、クライアントへ返すレスポンス

サーバは「Set-Cookie」というフィールドをHTTPヘッダに載せてレスポンスを返す
・クッキーは、「サーバーからクライアントへ返される HTTP レスポンスのヘッダ」に含まれる

形式
・Set-Cookie: NAME=VALUE; path=PATH; expires=DATE; domain=DOMAIN_NAME; secure (NAME=VALUEのみ必須)
HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Set-Cookie: visit=1; path=/; expires=Wed, 10-Oct-12 07:12:20 GMT

<html>
<head></head>
<body>
 <p>訪問回数:1</p>
</body>
</html>

・visit=1 の部分は age=26 でも name=james.brown でも、好きな変数名と値を指定可能
・expires にはブラウザが Cookie情報を覚えておく期限を指定
・タイムゾーンは必ず GMT(世界標準時)で指定
・expires を省略すると、ブラウザが終了するまで覚えておく


4.クライアント


レスポンスを受け取ったクライアントはCookieをブラウザに保存
・ブラウザは、この値をURLにひも付けて保持
・ブラウザは、サーバーから受け取った Cookie 情報をメモリやディスクへ保存
・expires 指定が無い場合は、メモリにだけ保存


5.クライアント → サーバ


Cookie送信
・ブラウザは、次回「同じページあるいは同じフォルダにある別ページ」へアクセスする際に、覚えておいた Cookie 情報を HTTP リクエストのヘッダに含めて送信
・次にアクセスする場合、ブラウザは保持しているクッキーを検索し、送信先URLにひ も付けられたすべてのクッキーをCookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ... という形式のHTTPヘッダーに含めリクエスト送信
・再度ユーザがアクセスするとき、Webブラウザは保存したCookieの値(この場合、「visit=1」)を自動的に載せてリクエストを行う
GET /index.html HTTP/1.1
Host:example.com
Cookie: visit=1
・これをサーバーが受け取ることにより、その日初めてアクセスしたページであっても、訪問回数や前回のログイン名などを表示することができるようになる
※ Cookieを載せてリクエストするURLの範囲はSet-Cookieの属性値で指定され、その値に従う
※ Cookieには有効期限があり、有効期限が切れたCookieは消滅し、リクエストに載らない


6.サーバ


サーバはリクエストにvisit=1というCookieを見つける
・これは前回までの訪問回数なので、visitに1を足して再度Set-Cookieフィールドをヘッダに載せる
・レスポンスボディには、Set-Cookieフィールド同様にvisitの値に1を加えて構築したHTMLを載せる
・この結果「訪問回数:2」となる
HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Set-Cookie: visit=2; path=/; expires=Wed, 10-Oct-12 07:13:20 GMT

<html>
<head></head>
<body>
 <p>訪問回数:2</p>
</body>
</html>




link

Twitter検索結果。「クッキー / HTTP cookie」に関する最新ツイート

素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie
素敵すぎる♥アイシングクッキー @_i_cookie

クッキー / Windows7 / Chrome



週間人気ページランキング / 9-19 → 9-25
順位 ページタイトル抜粋 アクセス数
1 Nginx設定。エラーログレベル | Nginx(Webサーバ) 16
2 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 15
3 PHPのmb_send_mail関数でメール送信できない | メール処理システム 11
4 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 10
5 tar: これは tar アーカイブではないようです 8
5 ImageMagick と imagick の違い | ImageMagick(ソフトウェアスイート) 8
5 さくらVPS0 8
6 manページ日本語表示 | CentOS 7 (CentOS) 7
6 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 7
7 ABRT により 問題が検出されました | CentOS 7 (CentOS) 6
7 Reached target Shutdown メッセージが表示されたあと、シャットダウンまたは再起動プロセスがハングアップする | CentOS 7 (CentOS) 6
7 PHPファイルでchmodエラー | PHP(プログラミング言語) 6
7 echo と cat の違い 6
8 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 5
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 5
8 「CentOS6」から「CentOS7」への移行 | CentOS 7 (CentOS) 5
8 「さくらVPS」で、「CentOS6」を「CentOS7」へ変更するためには? | CentOS 7 2週間無料のお試し期間 Link(さくらVPS) 5
9 6回目-10.Nginxでバーチャルホスト設定確認 | CentOS 7 2週間無料のお試し期間 6回目(さくらVPS) 4
9 cronで定期実行しているphpファイルを、コマンドライン経由で即時実行する | cron(Linuxコマンド) 4
9 MySQL 5.5 から 5.6 へのアップグレード | MySQL(データベース) 4
2021/9/26 1:01 更新