私はレールの初心者なので、簡単な例を教えてください。
ありがとう。
セッションは、サーバーとクライアント間のダイアログです。そのダイアログは、1つ以上の要求と応答で構成されます。
Railsはセッションごとに変数のバンドルを格納するため、リクエスト間で持続するユーザーごとの状態を保持できます。コントローラのセッションにアクセスするには、メソッドを使用しますsession
。リクエスト間で自動的に永続化されることを除けば、ハッシュのように動作します。1つのリクエスト中にセッションに何かを保存する場合:
session[:foo] = 'foo'
その後、後のリクエストで元に戻すことができます。
@foo = session[:foo]
セッションストアは、ほとんどの場合(排他的ではありませんが)認証に使用されます。deviseなどの認証gemを使用している場合は、セッションストアを使用して、誰がログインしているかを追跡します。
Rails(および他のWebサーバー)のセッションストアは、キーによってインデックスが付けられるキー/値ストアとして実装され、通常、特定のセッションに対してランダムに生成されます。サーバーはそのキーをクライアントに提供されるCookieに保存します。クライアントのブラウザは、リクエストごとにそのCookieを返します。サーバーはCookieからそのキーを取得し、それを使用してセッション状態を取得します。Railsがこれらすべてを処理するので、通常は心配する必要はありません。
セッションストアはコントローラーによって管理されます。ビューとモデルは、トリックなしではアクセスできません。
セッションは、複数のリクエストにわたってフロントエンドで使用アクションまたはデータを保存し、それらをバックエンドに渡すための方法です。コントローラのバックエンドでデータを取得し、そこで使用します。これは良い説明ですhttp://guides.rubyonrails.org/security.html#sessions
たとえば、ユーザーがページにコメントできるフォーラムがあるとしますが、ユーザーはログインしている場合にのみコメントを投稿できます。したがって、ログインまたは登録されていない場合に投稿をクリックすると、次のようになります。通常、Railsでは、ログインまたは登録を許可すると、別のページ、さらには現在のページにリダイレクトされます。問題は、入力したすべてのデータが失われることです。そのため、そのデータを保存してページに戻すか、要求どおりにデータベースに保存できるようにする必要があります。たとえば、HTMLに次のものがあります
<%= reply_form.text_area :body %>
...
<% end %>
次に、コントローラーに
if session[:text_area]
params["comment"] = session[:text_area]
....
そうすれば、期待どおりにparamsにセッションを渡すと、コントローラーがコメントを取得して、新しいコメントオブジェクトを作成します。
もう1つの良い例は、ショッピングカートです。セッションを有効にしていない場合、オンラインサイトで買い物をすることはできません。その理由は、ショッピングカートに何かを入れてから、さらに閲覧するか、ページに移動してアイテムを購入するためです。新しいページをクリックするたびに、サーバーに新しいリクエストが送信され、新しいデータが送信されます。セッションで購入するアイテムを保存しないと、最後に保存されたものを確認する方法がありません。ショッピングカートのデータを失うようにリクエストします。