2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-28

Webアプリケーション開発において、とても重要な技術である「セッション」という仕組みについて、よく理解できていなかったのでまとめてみました。

まずはWebの設計思想から

Webをシンプルかつ使いやすいものにするための設計思想としてRESTを採用しています。 以下、RESTを構成している6つのアーキテクチャスタイル
※その他、「Web」についての知識に関しては、こちらを参照

アーキテクチャスタイル 内容
クライアント/サーバ クライアントがサーバにリクエストを送り、サーバがそれに対してレスポンスをする
ステートレスサーバ サーバ側でアプリケーション状態を持たない。クライアントが一度出した処理を記憶してない
キャッシュ クライアントとサーバの通信回数と量を減らす。クライアントが取得したリソースを使い回し
統一インターフェイス インターフェイスを固定する。(例:HTTPメソッドは8つで統一する)
階層化システム システムを階層に分離する
コードオンデマンド プログラムをクライアントにダウンロードして実行する(例:JavaScriptはインストール不要)

この中でも、今回のセッションと切っても切り離せないのが、2つ目の「ステートレスサーバ」というアーキテクチャスタイル。Web(サーバ)はクライアントが出した過去のリクエストについて覚えていません。これはWeb(サーバ)からすると、リクエスト内容を覚える必要がない(覚えるためのメモリを用意しておく必要がない)ので、その分リクエスト処理に集中できるという点で大きなメリットがあります。しかし、ユーザー(クライアント)からすると、Webサービスの利用時に不便に働きます。
例えば、あるWebサービスに会員登録をして、ログインフォームにユーザー名とパスワードを入力してログインしたとします。すると、ログインが成功してサービスのトップ画面が表示されます。そして、別のページを表示させようとすると・・・、
Web(サーバ)はユーザーがログインしたということを覚えていないので、ログインフォームに戻り、ユーザーに対して再度ログインするよう要求します。ユーザーからすると、何度もログインしないといけないので、めちゃくちゃ不便です。
そこで、こういった問題を解決する仕組みとして利用されるのが、セッションという仕組みです。

セッションという仕組み

「セッション」という言葉の意味

セッションという言葉の意味は広く、様々な文脈で使われます。

 

①ログインユーザーが同一人物であることを紐付けるための仕組み
②一時的な情報の格納先
③ユーザーがログインしてからログインするまでの期間

 

セッションについて考える際は、どういった意味でその言葉が使われているのか注意する必要があります。今回の説明においては、①と②の意味でセッションという言葉を使います。
 

セッション(session)とは?

まずは、ここではセッション(session)という言葉を②一時的な情報の格納先、という意味で使います。また、実装する際はsessionと英単語を使うので、説明に英単語も使います。
 

セッション(session)は、ハッシュ(Hash)オブジェクトです。なので、あるキーに対する値としてデータを格納します。

session = {"fruits": "orange", "vegetable": "tomato", ...}

セッション(session)をどのように使うのか?

このセッション(session)を利用して、ログインユーザーの情報を保存することで、ステートレスというWebのアーキテクチャスタイルのデメリットを解消します。

session = {"url": "https://chopesu.com/blog/123", "user_id": "1", "contents": "sample..."}

具体的には、上記のようにセッション(session)にユーザー情報を格納し、ユーザーからのリクエスト時にこのセッション情報をサーバーに読み込ませることで、サーバーに同一ユーザーからのリクエストであることを認識させます。

どのようにしてサーバーにセッション情報を読み込ませるのか?

セッション(session)には個人情報が多く格納されているので、セキュリティのことを考えて慎重に扱う必要があります。では、どのようにしてサーバにこのセッション情報を安全に読み込ませるようにするのか?
それにはいくつかの方法があります。

 

・Cookieを利用する
・Redisを利用する
・データベースを利用する
・memcachedを利用する
・memoryを利用する 等々

 

これらの方法について全て説明すると、かなりの量になるので割愛しますが、要は個人情報を含んだセッション(session)の情報をどこに保存させて、どこからサーバーが読み込むようにするのか、によって方法が異なるということです。
今回は、Rails tutorialでも紹介されている「Cookieを利用する」という方法で、サーバーにセッション(session)の情報を読み込ませる方法について紹介したいと思います。

 

長くなりそうだったので、続きはこちらにまとめました

 

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?