こんにちは、SHOOTです。
プログラミング未経験からWeb系エンジニアになってはや半月。
「Cookieとかセッションって何??」
という壁に当たったので、それらについて調べました。
Cookieやセッションについてまだよく理解していない方、
ぜひ参考にしてください!
目次
Cookieとセッションとは?
サイトにアクセスしている人(あなた)が「何者なのか」という情報をブラウザに保持できる仕組み、もしくはデータのことです。
主に、ユーザーの識別やユーザー毎のデータの保存に使われます。
例えば、
フェイスブックやツイッター。
自分のアカウントにログインした後、何か投稿したりいいねしたりできます。
ところで、フェイスブックやツイッターはどうやってあなたが特定のユーザーだということを判断しているのでしょうか?
実は、Cookie(クッキー)やセッションという技術が使われています。
通常、ブラウザとサーバーの通信は、1問1答です。
ブラウザが
「これ表示して」
とリクエストを出す。
それに対してサーバーが
「はいよ」
とレスポンスします。
これではサーバー側はあなたが何者なのか認識できません。
ところが、Cookie(クッキー)もしくはセッションを使うと、
ブラウザが「自分が何者か」という情報を保持できるようになります。
ブラウザが持っているユーザー情報を元に、サーバー側はあなたが特定のユーザーであると判断できます。
Cookieとセッションの違い
データ保持の場所が異なります。
Cookieの場合、
クライアント側でデータを保持します。
データが保持される期間はサーバー側で設定できます。
セッションの場合、
サーバーサイド側でデータを保持します。
Cookieでブラウザにデータを持たせておいて、Sessionの値と比較し、ユーザ認証を行ったりします。
ちなみに保存期間はサーバー側で設定できます。
Cookieとセッションを利用して、堅牢なWebアプリケーションを作れるといいですね!
ブラウザから見てみる
Cookieやセッションの情報はブラウザから確認できます。
ChromeでF12を押下すると検証画面が開けます。
Applicationタグに行くと、Cookieとセッションを確認できます。
(ここでいうセッションは、セッションCookieと言われるCookieの一種でした。)
Laravelで実装してみた
laravelの場合、以下のコードでセッションに保存し、取り出せます。
web.php(ルーティング)
TweetController.php(コントローラ)
session.blade.php(ビュー:新規作成する)
に以下のコードを追記します。
ちなみにTweetController.phpは、
php artisan make:controller TweetController
で自動生成しました。
web.php
Route::get('/session', 'TweetController@session');
TweetController.php
public function session(Request $request)
{
$request->session()->put('user_id', 'shoot');
$userId = $request->session()->get('user_id');
return view('session', ['userId' => $userId ]);
}
session.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>session check</title>
</head>
<body>
<h1>Session Check</h1>
<h3>{{ $userId }}</h3>
</body>
</html>
TweetController.phpにおいて、
putでセッションにkeyとvalueを保存でき、
getで指定したkeyのvalueが取り出せます。
今回の場合、key:’user_id’, value:’shoot’を指定しました。
View側でセッションから取得したkeyを表示させます。
表示させたviewはこちらです。
セッションに保存した値をViewに表示できました!!!
今回、Cookieとセッションの違いを整理し、セッションに関しては実装しました。
認識が間違っていたらバシバシ指摘をいただけると幸いです。
今後もWeb系エンジニアに必要な知識を発信していきます。
それではまた!
コメント