prog_cgi:セッション変数
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
prog_cgi:セッション変数 [2019/03/09 10:52] – 作成 hirohito | prog_cgi:セッション変数 [2019/03/09 11:36] – hirohito | ||
---|---|---|---|
行 1: | 行 1: | ||
====== セッション変数 ====== | ====== セッション変数 ====== | ||
+ | セッション変数とはHTTPリクエストをまたがって値を保持することができる変数です。 | ||
+ | 通常ウェブアプリケーションは、ブラウザからのリクエストを受けてプログラムが動作するというルーチンを何度も繰り返します。この時、1回目のリクエストと2回目のリクエストは何の関連もなく、1回目のリクエスト時の変数の値は2回目のリクエスト時には消えています。 | ||
+ | これでは困る場合が多いので、なんらかの方法でリクエストをまたいで状態を保存する手段が必要になります。 | ||
+ | この1つの解決策がセッション変数です。 | ||
+ | |||
+ | |||
+ | ===== 使い方 ===== | ||
+ | |||
+ | [[prog_cgi: | ||
+ | |||
+ | [1.start]\\ | ||
+ | ↓\\ | ||
+ | [2.入力フォーム表示/入力]\\ | ||
+ | ↓\\ | ||
+ | [3.確認画面表示/YES, | ||
+ | ↓\\ | ||
+ | [4.最終確定画面表示]\\ | ||
+ | |||
+ | 3までは、前項で作ったところです。3から4へは、入力された結果を引き継がなければなりません。ここにセッション変数を使います。 | ||
+ | |||
+ | 3までのプログラムを再掲します。 | ||
+ | |||
+ | |||
+ | <code ruby main.rb> | ||
+ | require ' | ||
+ | |||
+ | class FormController1 < AlController | ||
+ | # constructor | ||
+ | def initialize() | ||
+ | @form = AlForm.new( | ||
+ | AlText.new(" | ||
+ | AlInteger.new(" | ||
+ | AlSubmit.new(" | ||
+ | ) | ||
+ | @form.action = Alone:: | ||
+ | end | ||
+ | |||
+ | # デフォルトアクション | ||
+ | def action_index() | ||
+ | AlTemplate.run( ' | ||
+ | end | ||
+ | |||
+ | # 確認画面 | ||
+ | def action_confirm() | ||
+ | if @form.validate() | ||
+ | AlTemplate.run( ' | ||
+ | else | ||
+ | AlTemplate.run( ' | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | <code html index.rhtml> | ||
+ | <%= header_section %> | ||
+ | <%= body_section %> | ||
+ | |||
+ | <%= @form.get_messages_by_html() %> | ||
+ | <%= @form.make_tiny_form() %> | ||
+ | |||
+ | <%= footer_section %> | ||
+ | </ | ||
+ | |||
+ | |||
+ | 確認画面では、YES/ | ||
+ | |||
+ | <code html confirm.rhtml> | ||
+ | <%= header_section %> | ||
+ | <%= body_section %> | ||
+ | |||
+ | text1: <%=h @form[: | ||
+ | integer1: <%=h @form[: | ||
+ | <br> | ||
+ | よろしいですか?< | ||
+ | <a href="< | ||
+ | <a href="< | ||
+ | |||
+ | <%= footer_section %> | ||
+ | </ | ||
+ | |||
+ | |||
+ | テンプレートの追加部分を見てもらうとわかるとおり、YES(はい)の場合は " | ||
+ | |||
+ | <code ruby> | ||
+ | # 確認画面 | ||
+ | def action_confirm() | ||
+ | if @form.validate() | ||
+ | session[: | ||
+ | session[: | ||
+ | AlTemplate.run( ' | ||
+ | else | ||
+ | AlTemplate.run( ' | ||
+ | end | ||
+ | end | ||
+ | |||
+ | # 最終確定画面 | ||
+ | def action_commit() | ||
+ | @text1 = session[: | ||
+ | @integer1 = session[: | ||
+ | AlTemplate.run( ' | ||
+ | end | ||
+ | |||
+ | # キャンセル | ||
+ | def action_cancel() | ||
+ | @form[: | ||
+ | @form[: | ||
+ | AlTemplate.run( ' | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | 最終確定画面用テンプレート | ||
+ | |||
+ | <code html commit.rhtml> | ||
+ | <%= header_section %> | ||
+ | <%= body_section %> | ||
+ | |||
+ | text1: <%=h @text1 %> <br> | ||
+ | integer1: <%=h @integer1 %> <br> | ||
+ | <br> | ||
+ | 以上の内容で確定しました。 | ||
+ | |||
+ | <%= footer_section %> | ||
+ | </ | ||
+ | |||
+ | これで必要な4つのファイル、main.rb, | ||
+ | |||
+ | 実行すると以下のようになります。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | コントローラローカルセッション変数は、個々のコントローラ内でのみ有効なセッション変数です。異なるコントローラからはアクセスできません。一つのアプリケーション内でグローバルにアクセスできるAlSessionによるセッション変数とは異なり、スコープがコントローラ内のみに限定されます。他のコントローラと名前がぶつかることを心配する必要がありません。 |
prog_cgi/セッション変数.txt · 最終更新: 2019/03/09 11:54 by hirohito