#SessionとCookie
Railsチュートリアルでログイン機能の実装まで学習したが、いかんせん【わからない】
本当に分からない。自分が今何をやっているか理解できない。
こういう「分からない事が分からない」のは基礎的な知識が抜け落ちているパターンが多い。
どの基礎を抑えれば理解できるのかわからないが、まずSessionとCookieというこの2つのキーワードがよくわからないので、自分なりにまとめていく。
私は現職が医療従事者であり、専門知識の理解は対象(自分 or 他人)が理解できる内容までかみ砕く(対象によって流動食、ペースト食とレベルを変える)必要があると考えている。
このページでの内容はプログラミング学習前の自分レベルでも理解できるように、出来る限りかみ砕いた。内容を簡素にしていくと、認識違いやそもそも間違ってるでという事も起きる。
その場合はご指摘、ご助言いただけるとうれしいです。
※個人的ではあるが、感覚的に理解しやすいようにwebサーバーを「webページ」・ブラウザを「ユーザー」と表現している。
##webの仕組みから始まる。
webの仕組みは
-
ユーザーがwebページにアクセスする(リクエストする)
-
アクセスしたページが表示される。(レスポンスが返ってくる)
-
次のページにアクセスすると、①で送られてきたユーザーのリクエストは2つ目に引き継がれない
といった仕組みになっている
HTTP通信は情報の引継ぎはできないようになっている。 ※HTTPの通信には「HTTPリクエスト」と「HTTPレスポンス」の2つに分けられる。 ※①がHTTPリクエスト②がHTTPレスポンス ※HTTPリクエストには「httpリクエストライン」「HTTPリクエストヘッダ」「HTTPメッセージボディ」の3つに分かれてる。 ※HTTPリクエストヘッダには「ユーザーエージェント名」や「cookie」情報が含まれている
情報が引き継がれないなら、webページでよくある、ログインする仕組みとかはどうなっているのか???
ここでsessionとcookieという仕組みが登場する。
#Sessionとcookieとは、それらの違い
Sessionとcookieは似ている。一見、動作としては同じように感じる。
違いとしては
cokkieはユーザー側(ブラウザ)に保存、覚えられる情報に制限あり(サイズ、文字列のみ)、簡単に盗み見られる
sessionはサーバー側に保存、覚えられる情報に制限はない、簡単に盗み見られない
#cookieとは
cookieはユーザー側(ブラウザ)にメモ書きレベルの情報を保存するための仕組み
cokkieを使ったwebの流れはこうなる。
-
ユーザーがwebページにアクセスする
-
リクエストされた画面を返す。この時①でユーザーから送られてきた情報を元にwebページはプログラミングで指示された処理をしてユーザーに画面を返す
(例:「あなたはこのサイトに○○回訪問したよ」とか「指示された色に画面の色を変えたよー」とか。この時にcookieというメモ書きも一緒につけている例でいうと「○○回」「○○色」など) -
webページからついてきたメモをユーザーが保存します。次のページにアクセスする時にこのメモ書きの情報も一緒につけて、webページに要求します。
-
本来のHTTP通信であれば情報は引き継がれないが、メモ情報がついているのでそのメモ情報を元にユーザーに適した画面が表示される。
このcookieはユーザー(ブラウザ)が保存しているのでデベロッパーツールで編集や削除ができる。つまりメモの内容を見れるし、書き換えられるし、捨てる事もできる。
そのため、大事な情報はcookieで扱ってはいけない(ログイン情報とか)
#Sessionとは
Sessionは情報をwebページ側で保存するのでデベロッパーツールで触る事はできない。
つまり安全である。
ただしwebサーバー上で保存しているので、アクセスしてきた人がAさんなのか、Bさんなのか、Cさんなのか識別しないといけない。(これはブラウザが変わっても同様の事が言える)
ユーザー(ブラウザ)とwebページで保存されているsessionを紐づけてあげる必要がある
sessionではそのためだけにcookieを使う。
sessionの流れは
-
ユーザーがwebページにアクセスする
-
リクエストされた画面を返す。①でユーザーから送られてきた情報を元にwebページはプログラミングで指示された処理をしてユーザーに画面を返す。そして情報をサーバー側で保持&Session情報をcookieとしてセットするよう送ってくる。
-
ユーザーはsession情報をセットする。次のページにアクセスする時に、このセッション情報を送信してwebページに要求します。
-
本来のHTTP通信であれば情報は引き継がれないが、session情報がついているのでその情報を元にユーザーに適した画面が表示される。
#ここまでのまとめ
・通常HTTPではページ毎に情報を引き継げない ・そのためcookieやsessionを使って情報を継続しないといけない ・sessionとcookieは違いがある ・ログイン機能を実装するにはsessionとcookieを使う必要がある
#参考リンク
https://wa3.i-3-i.info/word1841.html
https://wa3.i-3-i.info/word1791.html