未経験エンジニア必読！「セッション」というWeb技術について分かりやすく解説します！！

<p>Webアプリケーション開発において、とても重要な技術である「セッション」という仕組みについて、よく理解できていなかったのでまとめてみました。</p>
<h2>まずはWebの設計思想から</h2>
<p>Webをシンプルかつ使いやすいものにするための設計思想として<span style="color: #ff0000;">REST</span>を採用しています。 以下、RESTを構成している６つのアーキテクチャスタイル <br />※その他、「Web」についての知識に関しては、<a href="https://chopesu.com/programing/web/" target="_blank" rel="noopener noreferrer">こちら</a>を参照</p>
<!-- /wp:paragraph -->

<!-- wp:table -->
<table class="wp-block-table">
<thead>
<tr>
<th>アーキテクチャスタイル</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>クライアント/サーバ</td>
<td>クライアントがサーバにリクエストを送り、サーバがそれに対してレスポンスをする</td>
</tr>
<tr>
<td>ステートレスサーバ</td>
<td>サーバ側でアプリケーション状態を持たない。クライアントが一度出した処理を記憶してない</td>
</tr>
<tr>
<td>キャッシュ</td>
<td>クライアントとサーバの通信回数と量を減らす。クライアントが取得したリソースを使い回し</td>
</tr>
<tr>
<td>統一インターフェイス</td>
<td>インターフェイスを固定する。（例：HTTPメソッドは８つで統一する）</td>
</tr>
<tr>
<td>階層化システム</td>
<td>システムを階層に分離する</td>
</tr>
<tr>
<td>コードオンデマンド</td>
<td>プログラムをクライアントにダウンロードして実行する（例：JavaScriptはインストール不要）</td>
</tr>
</tbody>
</table>
<p>この中でも、今回のセッションと切っても切り離せないのが、2つ目の「<span style="color: #ff0000;">ステートレスサーバ」</span>というアーキテクチャスタイル。<span style="color: #ff0000;">Web（サーバ）はクライアントが出した過去のリクエストについて覚えていません。</span>これはWeb（サーバ）からすると、リクエスト内容を覚える必要がない（覚えるためのメモリを用意しておく必要がない）ので、その分リクエスト処理に集中できるという点で大きなメリットがあります。しかし、ユーザー（クライアント）からすると、Webサービスの利用時に不便に働きます。<br />例えば、あるWebサービスに会員登録をして、ログインフォームにユーザー名とパスワードを入力してログインしたとします。すると、ログインが成功してサービスのトップ画面が表示されます。そして、別のページを表示させようとすると・・・、 <br />Web（サーバ）はユーザーがログインしたということを覚えていないので、ログインフォームに戻り、ユーザーに対して再度ログインするよう要求します。ユーザーからすると、何度もログインしないといけないので、めちゃくちゃ不便です。<br />そこで、こういった問題を解決する仕組みとして利用されるのが、<span style="color: #ff0000;">セッション</span>という仕組みです。</p>
<!-- /wp:table -->

<!-- wp:heading -->
<h2>セッションという仕組み</h2>
<h3>「セッション」という言葉の意味</h3>
<p>セッションという言葉の意味は広く、様々な文脈で使われます。</p><p>&nbsp;</p>

<div class="simple-box2">①ログインユーザーが同一人物であることを紐付けるための仕組み <br />②一時的な情報の格納先 <br />③ユーザーがログインしてからログインするまでの期間</div><p>&nbsp;</p>

<div>セッションについて考える際は、どういった意味でその言葉が使われているのか注意する必要があります。今回の説明においては、①と②の意味でセッションという言葉を使います。</div>
<div> </div>
<h3>セッション（session）とは？</h3>
<div>まずは、ここではセッション（session）という言葉を②一時的な情報の格納先、という意味で使います。また、実装する際はsessionと英単語を使うので、説明に英単語も使います。</div>
<div> </div>
<p>セッション（session）は、ハッシュ（Hash）オブジェクトです。なので、あるキーに対する値としてデータを格納します。</p>
<pre class="lang:ruby decode:true">session = {"fruits": "orange", "vegetable": "tomato", ...}</pre>
<h3>セッション（session）をどのように使うのか？</h3>
<p>このセッション（session）を利用して、ログインユーザーの情報を保存することで、ステートレスというWebのアーキテクチャスタイルのデメリットを解消します。</p>
<pre class="lang:ruby decode:true">session = {"url": "https://chopesu.com/blog/123", "user_id": "1", "contents": "sample..."}</pre>
<p>具体的には、上記のように<span class="marker">セッション（session）にユーザー情報を格納し、ユーザーからのリクエスト時にこのセッション情報をサーバーに読み込ませることで、サーバーに同一ユーザーからのリクエストであることを認識させます。</span></p>
<h3>どのようにしてサーバーにセッション情報を読み込ませるのか？</h3>
<p>セッション（session）には個人情報が多く格納されているので、セキュリティのことを考えて慎重に扱う必要があります。では、どのようにしてサーバにこのセッション情報を安全に読み込ませるようにするのか？<br />それにはいくつかの方法があります。</p>
<div class="simple-box2"><p>&nbsp;</p>

<p>・Cookieを利用する<br />・Redisを利用する<br />・データベースを利用する<br />・memcachedを利用する<br />・memoryを利用する　等々</p><p>&nbsp;</p>

</div>
<div>これらの方法について全て説明すると、かなりの量になるので割愛しますが、要は<span class="marker">個人情報を含んだセッション（session）の情報をどこに保存させて、どこからサーバーが読み込むようにするのか、によって方法が異なるということ</span>です。</div>
<div>今回は、Rails tutorialでも紹介されている「Cookieを利用する」という方法で、サーバーにセッション（session）の情報を読み込ませる方法について紹介したいと思います。</div><p>&nbsp;</p>
長くなりそうだったので、続きは<a href="https://chopesu.com/programing/session/" target="_blank" rel="noopener noreferrer">こちら</a>にまとめました
<p>&nbsp;</p>