はじめに
Railsでは、簡単にログイン・ログアウト機能を実装できるgem 'devise'があります。
初めてRailsでアプリケーションを作成するときによく使っていましたが、どのような仕組みで成り立っているのか分からなかったので、自分でログイン機能を実装しました。その中で、重要な部分だと感じたSessionとCookieについて紹介します。
そもそもログイン・ログアウトとは
簡単に言うと、Webアプリ・サイトにユーザーが誰なのか把握してもらうことです。
把握してもらうと、ユーザー(自分)を特定してもらい認証してもらえます。
この過程を得ることで、自身のアカウントでWebアプリやサイトを閲覧することができ、例えばGoogle社の提供するGmailであれば、自身のメールアドレス宛て届いたメールを閲覧・返信することができます。
ログインの仕組み
ログイン機能の前提には、SessionとCookieの仕組みを把握しておく必要があります。
Sessionとは、1つのブラウザから連続して送られる一連のリクエストの間で状態を共有できるようにする仕組みです。
一般的に、ユーザーがブラウザにリクエストを送ると、レスポンスが返ってきます。HTTPリクエストの場合、状態を保持しないプロトコル(通信する上での決まり)なので、ユーザーから送られた1つ目のリクエストを2つ目のリクエストに引き継ぐことはできません。
そのため、Webアプリケーション側でSessionと言う仕組みを用意して、一連のリクエストの間でログイン状態を共有するようになっています。
一方、CookieはSessionと似たような仕組みですが、ブラウザとWebサーバーの間で行われる仕組みです。
具体的には、Webサーバーからブラウザhttpレスポンスが返ってくるときに、レスポンスを一緒にCookieの情報を返します。
Cookie情報は、キーとペアの集合体で、ブラウザはCookieの情報をサーバーのドメイン等に紐づけて保存されます。そして、ユーザーが同じドメインに対して、httpリクエストを送るときにCookie情報を添えて送ることで以前にどのようなCookie情報を受け取ったブラウザからリクエストが送られてきているかを判断します。
具体的な例をあげると、PCからGmailやTwitterにアクセスすると、ログインの過程を得ることなく自分のアカウントにログインできていることがあります。これは、Cookie情報を添えてリクエストが行われているためです。
ログイン自体は、Sessionを使って実装することになりますが、そのSessionの仕組みの一部をCookieが担っている形になっています。
以上のSessionとCookieの機能を基に、ログイン機能が実装されています。
まとめ
ログインの基本的な仕組みを担うSessionとCookieについて紹介しました。
本当に基本的な知識ですが、重要なものだと思いますので参考にしてください。