other今回ウェブサービスを作る上では必須である、セッション管理についてまとめてみたいと思います。はじめにまずはじめに「セッション」とは、ウェブサイトにアクセス(ログイン)してからの一連の操作を指します。“通信を行うためのプロトコルであるhttpがステートレスなプロトコル”であるためです。ステートレスとは、その名の通り”状態”が”ない”ことです。あるhttp通信で何をしたかを他のhttp通信(たとえそれが同一ユーザからのものであっても)が知るよしがないということである。ある特定のユーザのウェブサイトでの一連の操作がステートレスなプロトコルでは追えないということです。それが問題なのかある特定のユーザのウェブサイトでの一連の操作がわからないと何が問題なのでしょうか。ショッピングサイトを考えて見れば一目瞭然です。ショッピングサイトでは「商品を選択する」→「商品の総額をお金を支払う」という流れがあると思いますが、この流れはあくまで特定のユーザによるものです。ユーザAが選んだ商品はユーザAが支払う必要があるのでショッピングサイトはユーザを識別する必要がありますが、http通信はそれぞれが単独な通信であるがために、一連の操作を記憶する術がないために、セッションという仕組み(httpとは全く別のレイヤー)を用意し、あたかもステートフルのように振舞いをさせる必要がある、ということです。どのような仕組みでセッションを管理するのかセッションの管理がどう実現されているかというと、最もポピュラーは方法は、ユーザを識別するためのセッションIDをウェブサーバ側で発行し、発行したセッションIDをユーザのブラウザのクッキーに保存するという方法です。クッキーとはWebサーバ側が唯一クライアント側にデータを保存したり、削除したりできる領域。この領域にユーザ固有の情報を保存し、そのクッキーに保存された情報を参照することで、Webサーバ側はユーザを識別することができます。Railsだとsessionメソッドセッションの概要、仕組みを抑えたところで、続いてRailsのsessionメソッドを見てみます。railsでセッション管理を行うはsessionメソッドを用います。railsのデフォルトの設定(設定ファイルをいじることで他のやり方に変更することができる)ではsessionメソッドを使用することで”ブラウザのクッキー”に値を設定することができます。クッキーに保存するデータは、上の説明したセッションIDではなくデータそのものを保存します。一般的にこの方式は「セッション管理をクッキーを利用して実現する」方法として知られていますが、混乱を招きやすい表現であります。ポピュラーな方法である「セッションIDを発行してセッション管理する方法」も、セッションIDをクッキーに保存しているからです。この二つの本質的な違いは、「維持したいデータそのものをクライアントのクッキーに保存」するか「セッションIDを発行してIDをクライアントのクッキーに保存し、本当に維持したいデータをサーバ側にIDと紐付ける形で保存」しておくかにあります。この違いはかなり混乱しやすいので、しっかり押さえておきましょう。この違いを抑えたところで、もう一度railsのセッション管理に話を戻します。railsではデフォルトでは前者の方法によってセッションを管理します。user.idが実行されると、セッション(クッキー)にuser.idの値を保存できます。これがウェブサービスでいうログイン処理です。セッション(クッキー)にuser.idを保存するときには暗号化をしているためクッキーを覗いても、その値はわからないようになっています。この方法には大きな問題があります。それは、クライアントにデータを保存する性質上、サーバ側の好きなタイミングでセッションを破棄できなくなることです。ログイン処理でセッション(クッキー)にユーザ情報を保存するのでログアウト処理ではそのセッション(クッキー)を削除する必要があります。nilを実行することで、セッション(クッキー)を破棄し、以降ログイン状態が続かないようにしますが、クライアント側の領域であるクッキーはユーザが自由に読み書き可能です。よって、ログインして保存されたクッキーをコピーしておいて、ログアウト後(クッキー削除された後)に再度クッキーに設置された場合、サーバ側ではこれを判別することはできません。よってログイン状態が続いてしまいます。よって、実際にセッション管理する時はデフォルトのこの設定を変えて、他の方法を用いるが多いです。※「セッション(クッキー)」と書いたのは訳があって何度も言いますがセッションと言いつつデータはすべてクッキーに保存(railsデフォルト)しているから。デフォルトの設定を変えるにはrailsではセッション管理の方法としてクッキーを用いる方法を強く推奨しているため、その他の方法でセッション管理をしようと思えば、標準のパッケージではできなくて、gemを導入する必要があります。・セッションIDとデータをsessionsテーブルに保存する・セッションIDとデータをrailsのメモリに保存するなどの方法があり、作るウェブサービスに応じて選択すると良いでしょう。まとめ一番伝えたかったのはセッションを管理する方法の一つにブラウザのクッキーを使う方法があり、その他にもサーバ側やメモリに保存する方法がありますが、いずれの方法も実はブラウザのクッキーは使っているということです。重要な違いはデータそのものもクッキーに保存されているのかサーバ側に保存しているのかという点です。これさえ理解すれば、他の記事やドキュメントがすんなり理解できるようになるでしょう。CapistranoとはRubyで記述されたDSLを用いて複数のリモート環境を操作するためのツールである。方は、まずはリファレンスをどうぞ。0:...記事を読むSQLドリルアイドルくじサービスのテーブルの残骸があったので、これを使ってクエリを試していく。国際化対応として言葉を各言語の翻訳して表示したりするためにRailsではI18n.tを使う。コメントをキャンセルメールアドレスが公開されることはありません。新宿で働くウェブエンジニアの技術ブロク.。