電子書籍の厳選無料作品が豊富!

セッションはクッキーが有効になってないと使えないと本で覚えました。そしてセッションの仕様として「そのウィンドウでのみ有効。閉じたら破棄される」ともありました。しかしこれではexpires(有効期限)を設定しないクッキーと違いがないように思うのですが・・・。セッションとクッキーの相違点はどのようなものなのでしょうか?またそれをどのように生かす方法があるのでしょうか?

A 回答 (6件)

スーパーグローバルで言うところの$_SESSIONと$_COOKIEの違いと理解させていただきます



クッキーはクライアント側(パソコン側)に様々な情報を保存させる

セッションは、サーバー側に様々な情報を保存させる

ここが大きくちがっています

SESSIONはなぜ クッキー機能を使うかということですがNo4さんの仰るとおり、HTTP通信は、1アクセスごとにブチブチと切れてしまい、前後のページとの因果関係を引き継がないからです
セッションIDと呼ばれる値のみをクッキーとして保存させておくのです


クッキーはクライアント側(パソコン側)に全ての値を保存させますからユーザーが改変可能なのです
改変されても問題のない情報ならば良いのですが、例えばユーザーログインを必要とするサイトの場合は改変されたら大変です

例えばメールアドレス+パスワードでログインするシステムでログイン後に Login=TRUE
という値をクッキーに保存させておくシステムがあったらどうなるでしょう
ちょっと知識のある悪意ある人ならば、常にLogin=TRUEというクッキーを用意しておけば、他人のメールアドレスを知っているだけで、そのメールアドレス本人になりすましてログインし放題になりますよね

そういったクライアント側に保存させておきたくない情報をサーバー側で保存する仕組みで、クライアント側には、セッションIDと呼ばれる値のみを保存させておきます
サーバーとクライアント側のやりとりとしては、このセッションIDのみをやりとりしてセッションIDを基にサーバー側に保存させておいたSESSION値を読むわけです

http://search.net-newbie.com/php/ref.session.html
(ここで、「または、URL に埋め込みます」ってありますけど、URLに埋め込むような使い方は好ましくないです
    • good
    • 7

がるです。

すみません追伸をば。
#1さんや#2さんがおっしゃってるのは「セッション情報」という、「そのセッションに結びついた情報とかデータとか」のお話になります。
私が書いているセッションというのは「Web サイトを訪れたユーザがサイト内で行なう一連の行動」という行動の単位になります。
例えばこのあたりをご覧いただけると。
http://e-words.jp/w/E382BBE38383E382B7E383A7E383 …
    • good
    • 0

がると申します。


んっと…全体的に色々と整理などしながら。
まず先に。

> セッションはクッキーが有効になってないと使えないと本で覚えました。
多くの場合においてYesですが「必ずCookieが必要か」というと「Cookieを使わないやり方もあります」。

んで。
まずCookieとは、httpという通信方法によって定められた「情報をやり取りするための方法の一つ」になります。
もうちょっと正確に行きますと「サーバ側からの依頼でクライアント側に情報を保存させ、それを受け取ることが出来るメカニズムである」と定義できます。
Cookieは、サーバ側からの「Set-Cookieヘッダ」によって情報がサーバからクライアントに伝達され、保存されます。
また、クライアントからサーバへのアクセス時に、送信すべきCookieを「Cookieヘッダ」によってクライアントからサーバへ伝達します。
という記述からわかるとおり、Cookieは厳密に通信手法の定まっている「実装」になります。

一方で。
HTTPは基本的に「1アクセス毎にぶつぶつと切れてしまう」ものなのですが、そのアクセスを「一人のユーザが一連のものとして」あつかいたいなんてケースが少なからずありまして。
その場合に「セッション」と呼ばれる「概念(私は哲学とか呼称しますねぇ)」を使って「どのユーザさんからのアクセスなのか」を識別したいなぁっていう部分があります。
ただ、セッションそのものはhttpという通信方法での固定的な規約はありません。つまり「やりたいなぁって気持ちはあるけどどうやったらいいかははっきりしていない」状態なんですね。

というわけで。「多くの場合において」、セッションという概念の実装のために、Cookieを用いる「ことが多い」ってのが実状です。
ただ、Cookieではなく、INPUTエレメントのhiddenを用いるなんて方法もあるので、セッションの実装は一概に「これだ」とはいえないのですが。
で。そのセッションの「実装方法によっては」、例えば「有効期限を設定しないCookieを使って」セッションを実装する、なんてぇことが起きるわけですね。

というわけで。CookieはRFCでも明示的に定められている一つの「仕様」であり「実装」ですが、セッションは飽く迄「概念」であり、実装ではありません。
これが最も大きな違いであると言えるかと思います。

技術よりな回答で恐縮ではありますが。
    • good
    • 1

話が色々と混線しているようです。


セッションと言った場合には2つの意味で使い分けられます。
「セッション」と「セッション管理」です。

> セッションはクッキーが有効になってないと使えないと本で覚えました。
そういう制約をかけるケースもあるということでしょう。

> そしてセッションの仕様として「そのウィンドウでのみ有効。閉じたら破棄される」
これは正しいです。アドレスを入力するかボタンをクリックすると画面が送られてきます。
これで1回のセッションは終わりです。次にボタンをクリックすると別のセッションとなります。

次は「セッション管理」の話です。
それでは都合が悪いのでクッキーやその他の方法(メッセージに情報添付)などで
あたかもセッションが連続しているように見せかけています。↓
これによってクッキーの制約を取り除くことが出来るようになります。

参考URL:http://www.scollabo.com/banban/php/php_14.html
    • good
    • 0

感覚的には #1さんの感じですが、全く意味が違います。



クッキーは、クライアント(ユーザ)側にデータを保持しますが、セッションはサーバ側にデータを保持します。

http://www.1kara.net/printable.php?%2Fphp%2Fapp% …

クッキーはクライアント側にデータが保存されるため、改ざんする事が出来ます。また、クッキーに保存されたデータは同じサーバの別アプリからもアクセス出来るのでセキュリティ上問題がある可能性があります。

セッションの場合はクライアント側にはセッションIDのみが保持されるので、詳細情報はサーバ側に保持されるので比較的安全です。当然、セッションIDが盗まれれば同じ事ですが、セッションIDは自動的に予測不可なIDがその都度振られますので、比較的安全と思ってよいです。

時間的に見た場合は、比較的長いスパンで保持したいもの(不連続な接続、例えばログイン名等)はクッキー、時間的には短時間で、その都度変化していくもの(例えばカート内の数量や価格等)はセッション、と言う風な使い分けが出来ると思います。

参考まで。
    • good
    • 4

 セッションはクッキーの拡張版です。


 クッキー・バージョン2とでもいいましょうか。

 クッキーはデータの最大容量が4キロしかなかったり、単純な構造のデータしか保存できなかったりと色々制限がありますが、その制限を取っ払ったのがセッションです。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!