rails-tutorial 8章アウトプット
・cookie(よくメールアドレスやパスワードを入力してログインするときに
cookieに保存しますか?とか出てくるあれって?
ブラウザに保存される小さな情報またはその領域
・sessionって?
サーバ側で一時的に保持できる情報またはその領域
・HTTPの性質
ステートレスである
具体的にいうと?ウェブは基本的にブラウザからリクエストに対して、サーバー側が
1つのレスポンスを返してそのやりとりは完結するようになっている
よって、リクエストの情報を保持した状態はHTTPの性質上無理になる
・じゃあAmazonとかのようにログインしたまま欲しいものとか注文できるのはなぜ?
ここで使うのが先ほどのcookieとsession!!
よくAmazonなどのサービスにログインするときメアドとパスワードを入力して
ログインボタンを押すが、そのリクエストに対して、サーバー側はその情報を
もとにユーザーを探してきて、sessionに格納する
その後、sessionの何処に保存されているのか(ID)情報を生成して、
それをcookieに保存してくださいと指示する
ここまでがいわゆるウェブ上でのログインの仕組み
cookieに情報が保存されたのち、例えば
欲しいものを注文(リクエスト)するときにcookieに保存された
sessionIDの情報もサーバー側に送られてサーバーはその情報をもとに
sessionから情報を検索してきて取得する
その後注文したことを知らせるレスポンスが返ってくる
ブラウザ上の動きでいうとログインした状態を保持したまま、いいねや他のページに飛んだりなどができるようにするなどの動きは
ログインという仕組みはセッションとかCookieにユーザーの情報を保存することで
異なるHTTPリクエストに繋がりを持たせること
・ログインフォームでもform_withタグを使うが、登録フォームとは違い、データベースを使っているではないので、
引数にモデルオブジェクトを渡すことができない、この時、引数にどこに(URL)何を(scope)、という情報を渡す必要がある
form_with(url: login_path, scope: :session, local: true)
今回の場合はsessionをキーとしたハッシュの入れ子構造になっているだけ
・flashの特徴
flashを使った1回目のリクエストが次のリクエストが来るまでは生き残る、
次のリクエスト来たら消えます君
.nowで次のリクエストが来た時には消える
故にflash.now[]でredirect_toなんてしたらそもそも表示されないみたくなる