質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

3回答

5136閲覧

FuelPHP の Cookie, Session について

退会済みユーザー

退会済みユーザー

総合スコア0

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

1クリップ

投稿2017/08/05 21:06

Cookie と Session がよくわからないので質問させていただきます。

私の理解

私は Cookie と Session について、以下のように理解しています。この理解に間違いがありましたら、ご指摘いただけると幸いです。

用語意味
Cookieブラウザとサーバの間で保持しておきたい情報を、キーバリュー形式でブラウザに保存しておく仕組み。
Sessionブラウザとサーバの間で保持して起きたい情報を、キーバリュー形式でサーバに保持しておく仕組み。このキーバリューに対応する識別子を生成し、それを Cookie としてブラウザに保存する。リクエストを受けたサーバは、識別子からキーバリューを特定し、情報を取り出すことができる。

FuelPHP の Session についてわからないこと

FuelPHP の Session のデフォルトの保存先が Cookie であると書いてある記事を見かけました。

FuelPHP の公式ドキュメントにも同様のことが書かれています。

「Session が Cookie に保存される」ということは、それはもはや単なる Cookie であるとしか思えません。

ところが、実際にブラウザで確認してみると、実データは Cookie としては保存されておらず、Session に対応するキー(と思われるもの)が保存されていました。

ブラウザ

ここでは、fuelcid の値が Session に対応する値であり、実データはサーバ上のどこかに保存されているのではないかと思っています。

これはどういうことなのでしょうか。ご存知の方、お答えいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

「Session が Cookie に保存される」ということは、それはもはや単なる Cookie であるとしか思えません。

ここは違いますね。セッションに求められる要件として、利用者本人でさえセッション変数の中身を見るとができず、改変・追加もできないことが求められます。セッションの実装としてセッションの中身を暗号化してクッキーに保存する方法がありますが、上記を満たしています。一方単なるクッキーは、利用者本人であれば中身を見ることも改変もできます。つまり、両者は異なります。
ただし、セッションの中身をクッキーに入れる方式の欠点として、安全なログアウトができないという点があります。クッキーにセッションIDのみを入れ、セッションの中身をサーバーに入れてあれば、サーバー側の情報を削除すれば、その後はなりすまし等はできません。一方、セッションの中身がクッキーに入っていれば、サーバー側でセッションを破棄することはできず、万一クッキーが漏洩すると、その後は、なりすましができてしまいます。これを防ぐ方法はありますが、結局状態をサーバー側で保存することになるので、セッションの中身をクッキーに格納するメリットも失われます。

投稿2017/08/06 08:42

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/06 08:53

ご回答ありがとうございます。 大変わかりやすいご説明で、すっきりと理解することができました。 やはり、世の中の一般的な Session の説明(「Cookie はクライアント側に、Session はサーバ側にデータを保存する」のようなもの)は、Session の一面的な部分を説明しているに過ぎない、ということなのですね。
guest

0

もう少しだけ質問させていただきたいのですが、クライアント・サーバ間でセキュアに情報を保持することが Session の大きな目的であり、それを達成するためには、暗号化した情報を Cookie に格納し、取り出すときに復号する、という方法をとることもできる。そして FuelPHP はデフォルトでそうしている、という理解で間違いありませんでしょうか?

合ってますよ。

SessionはHTTP標準ではなく、Cookieの応用利用です。

標準ではないのでSessionの値をDBに入れようがFileに保存しようが、メモリ内で保持しようがCookieに暗号化して入れようがサーバーの実装次第なので自由です。

投稿2017/08/06 08:06

Tak1016

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/06 08:44

ご回答ありがとうございます。 Session は、その内容がクライアント側にとって隠蔽されていれば良く、必ずしも実データを平文でサーバに保存する、という方法をとる必要はないのですね。(それは一つの方法でしかない) そうすると、世の中の一般的な Cookie と Session の説明が語弊にまみれている、ということになりますね。
guest

0

実データは暗号化されているので、直接は読めません(Fuelのソースコード)。

なお、これだけのデータがリクエストの度に行き来することとなって、通信量を増加させるなど、正直あまりよろしくないシステムということになっています(CodeIgniter 3では、Cookie保管が廃止されています)。

投稿2017/08/05 22:07

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/06 02:03

早速のご回答ありがとうございます。 もう少しだけ質問させていただきたいのですが、クライアント・サーバ間でセキュアに情報を保持することが Session の大きな目的であり、それを達成するためには、暗号化した情報を Cookie に格納し、取り出すときに復号する、という方法をとることもできる。そして FuelPHP はデフォルトでそうしている、という理解で間違いありませんでしょうか?
maisumakun

2017/08/06 04:05

いえ、セッションはあくまで「サーバサイドで」クライアントに対応した情報を持つためのもので、セッションデータ自体をクライアントと共有する必要は、本来ありません。
退会済みユーザー

退会済みユーザー

2017/08/06 06:52

なるほど。 そうすると、この場合、実データはどこにあるのでしょうか?
Tak1016

2017/08/06 07:46

だから、実データを暗号化した文字列が 図の コンテンツなんだって。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問