質問: ASPのセッション管理に関する質問です。 仕事でASP(VBscript+SQL)を使ったサイトの構築をすることとなりました。 VBscriptもSQLも初心者です。 サイトの内容は会員制のページで、ログイン→トップページの流れまではできたのですが、セッション管理をしていないので直接URLをたたくとどのページでも開いてしまいます。 【ファイル構成】 login.asp・・・ID・パスの入力画面 login_check.asp・・・入力されたID・パスがDBにあるか確認、OKならindex.aspへ index.asp・・・トップページ ネットで調べたところ、「global.asa」や「セッション管理」と言った言葉がキーなのかとは思います。 以下の私の解釈で問題ないか、また疑問点にご回答頂けたらと思います。 1ログイン時にID・パスがDBにあった場合セッションIDを作成。 2global.asaにセッションIDの有無を確認する文を記載し、index.asp以降のコンテンツページに記載 3直接index.aspにアクセスしてもセッションIDがなければリダイレクトでlogin.aspに飛ばす。 ※1 セッションIDの作成はlogin_check.aspでよいのか? ※2 セッションIDはDBに保存?それとも勝手にWEBサーバーに保存される? 簡単なサンプルを交えてご回答いただけると助かります。
回答: コレクション内の特定の項目には、一意の文字列キー、またはその名前を使用してアクセスすることができます。たとえば、Contents コレクションは、Session オブジェクトに格納されたすべての変数を保持しています。また、Contents コレクションは、Server.CreateObject を呼び出してインスタンス生成されたオブジェクトもすべて保持しています。たとえば、次のユーザー情報を Session オブジェクトに格納したとします。 <% Session.Contents("FirstName") = "Meng" Session.Contents("LastName") = "Phua" Session.Contents("Age") = 29 %> この場合、各項目には、コレクションに項目を格納するときに関連付けた文字列キーを使ってアクセスすることができます。たとえば、次の式は文字列 "Meng" を返します。 <%= Session.Contents("FirstName") %> 項目に関連付けられたインデックス (番号) を使用して項目にアクセスすることもできます。たとえば、次の式は Session オブジェクト内で 2 番目に格納されている情報を取得し、"Phua" を返します。 <%= Session.Contents(2) %> ASP のコレクションには、1 から番号が付けられています。項目に関連付けられたインデックスは、コレクションへの項目の追加やコレクションからの項目の削除によって変わることがあります。したがって、項目のインデックスが常に同じであると仮定することはできません。一般に、インデックスを使用したアクセスは、以下で説明するようにコレクション全体に対して繰り返し操作を行う場合か、または読み取り専用のコレクション内の項目にアクセスする場合に使用します。 省略記法を使用して、項目に名前でアクセスすることもできます。ASP は、オブジェクトに関連付けられているコレクションを一定の順序で探します。特定の名前を持つ項目が、あるオブジェクトのコレクションに 1 つしかない場合は、コレクション名を省略できますが、結果としてパフォーマンスが低下することがあります。 <%= Session("FirstName") %> Application オブジェクトまたは Session オブジェクトに格納された項目にアクセスする場合は、通常、コレクション名を省略しても目的の項目に安全にアクセスできます。しかし、Request オブジェクトの場合は、コレクション名を指定する方がより安全です。これは、コレクションに重複した名前を持つ項目が含まれる可能性が高いためです。