むねひろ@プログラマープログラマーの技術や経験の暴露ブログです。何か聞きたいことがあれば遠慮なくご連絡ください。munehiroクッキー、セッション、キャッシュの違いツイートシェアはてブLINEPocket今回はセッション、クッキー、キャッシュの違いについてです。WEBシステムを開発していると、必ず耳にするキーワードだと思います。これらを上手に使いシステムを構築するのですが、間違うとセキュリティ上の重大な問題に発展することもあります。恥ずかしい話ですが、これらがどういったもので、どういう目的で使われるか忘れることが多々あるため自分の備忘録も兼ねております。「エンジニア10年以上もやっててそんなこともw」とバカにされそうですが、言い返す言葉はありません(笑)HTTP通信について通常WEBブラウザでWEBサイトを閲覧する場合にはHTTPという通信手段を用いてサーバーとクライアント間を通信します。そのHTTP通信は、HTML文書の通信を目的に作られており、1つのURLに対し同じページを返すことしか出来ません。(これを静的と言います。)しかし、ショッピングサイトのカートや、ログインしたら見れるようなサイトなどは、ユーザーの状態によって表示する内容が変わります。(これを動的と言います。)こういったHTTPの弱点とも言える部分を解決したものがクッキーやセッションです。クッキーやセッションは状態を持ちまわることで、何度画面遷移をしても、数日後にサイトを再度開いても、現在の状態の操作が行えるようになります。6265などで定義されたHTTPにおけるウェブサーバとウェブブラウザ間で状態を管理する通信プロトコル、またそこで用いられるウェブブラウザに保存された情報のことを指す。ユーザ識別やセッション管理を実現する目的などに利用される。引用:Wikiクッキーはブラウザに保存されるWEBデータです。耳にする用途は、FacebookやTwitterなどのSNSを使っているときに、1度ログインすれば次回開いたときにログイン処理をせずにログイン出来るものです。ブラウザのクッキー情報を削除するとSNSのログインもし直しになるのは、ブラウザ上に保存されたデータが無くログイン出来なくなるためです。クッキーはクライアント側のパソコンに保存されるため、悪意のあるユーザーから不正に覗き見られる可能性があります。(自分のクッキーは自由に見てもらって構わないです)もちろん、不正アクセス禁止法でやってはいけないことにはなっており逮捕されますが、悪意のあるユーザーはそれでも覗き見てこようとしてきます。セキュリティソフトを入れてあなたのパソコンはしっかり守ってください。エンジニア目線で言うと、例えばログインして使う会員制のサイトを作った場合に、ログイン情報などはクッキーに保存してはいけません。SNSが再度ログイン出来るようになるのはクッキーのお陰と説明しましたが、この場合はログイン出来た事実だけをクッキーに保存することでログイン情報を盗まれることを防げます。クッキーには有効期限が設定出来るため、しっかり期限を設定して対応しましょう。お金が絡む銀行のシステムなどの場合にはクッキーに保存することはやめるか、数分で有効期限が切れるように設定しましょう。他にはGoogleやYahooなどの広告にも使われます。一度クリックしたバナー項目が何度も表示されるといったことはありませんか?それは、GoogleやYahooが”広告をクリックした事実”をクッキーに保存し、再度表示したり、興味のあるジャンルなどを解析したりするのに使われます。余談ですが、クッキーとビスケットの違いは手作り感があるかどうからしいです。セッションとはシステム開発を行う人の中では、クッキーとセッションの使い分けが一番悩ましいところではないでしょうか。➀コンピューターで、ログインからログアウトまでの一連の操作。コンピューターネットワークにおいては、コンピューター、サーバー、通信機器などの間で、接続が開始されてから終了するまでの一連の通信。いずれも単位としての意味があり、一連の行為を1セッションと数える。引用:コトバンクこのようにセッションとは、一連の操作のことをさします。Googleアナリティクスを見ていてもセッションという言葉があります。あれは、サイトを訪れて色々なページを見て離脱するまでの操作を総合して1セッションとカウントしています。クッキー同様にセッションにも有効期限がありますが、クッキーのように期限が切れるまでというより、一連の操作の中で持ちまわるデータがセッションデータになります。セッションはブラウザでIDのみ管理されており、IDをサーバーに渡すことで一時的に保存されたデータを呼び出すことが出来ます。セッションIDはクッキーで管理されています。セッションIDだけ持っていてもサーバーに投げないと中身のデータは取得出来ないためセキュリティは高めです。僕のスキルでは分からないですが、頭の良い悪質なユーザーはセッションIDから個人情報を抜き出そうと(もちろん犯罪)してきます。有効期限を365日にしたりとかはやめた方がよいです。ログインの例で言えば、ログインIDだけセッションで管理して、ログインしているかどうかはクッキーで管理するのが良いかと思います。ユーザー名などユーザーに紐づく情報はセッションのユーザーIDから取得すれば良いです。セキュリティを高めるなら、ログイン時のIPアドレスをセッションに格納し、ログイン情報を取得する際にユーザーのIPアドレスをチェックすれば尚良いと思います。キャッシュとはキャッシュだけちょっと用途が変わります。キャッシュは画像やHTMLのデータなどをクライアント(インターネットを閲覧する人)側のブラウザに保存することにより表示速度を向上させるものです。同じページを何度も開いた場合に、同じ画像やHTML,CSS,javascriptなどのデータを何度もダウンロードする必要は無いため、ブラウザに自動的に保存されるというものです。使うユーザーはクライアントということになります。エンジニア側としては、意図的にキャッシュを書き込むことも出来ますが、ほぼそんなことはする必要が無いでしょう。プログラムを修正してもキャッシュが残ってブラウザ上に反映されないことも多々あります。F5」でキャッシュごと更新しましょう。まとめクッキーはクライアントのパソコン(WEBブラウザ)でデータを管理しており、有効期限が切れるまで保持している。セッションは「ログインしてからログアウトまで」のような一連の操作を言い、セッションデータはサーバー側に保持される。キャッシュは動的ページを実現するためのものでは無く、画面表示の高速化が目的に画像やHTMLデータをブラウザに保持する。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。クッキーを全てor個別に削除する方法WordPressの投稿や固定ページを削除しゴミ箱に入れた場合に、自動的に完全に削除されないようにする設定RECOMMENDこちらの記事も人気です。シークレットモードむねひろ現在36歳。プログラマー歴16年。高校卒業後は調理師見習いをしていたけど、不況で先が不安になり離職。その後上京しハローワークの紹介でプログラマーに。分からないことだらけで辛い日々だったけど、3年頑張ったら色々見えてきてフリーランスに。面白そうなシステム開発をもっとしたい。