ASPのセッション管理に関する質問です。

仕事でASP(VBscript+SQL)を使ったサイトの構築をすることとなりました。
VBscriptもSQLも初心者です。

サイトの内容は会員制のページで、ログイン→トップページの流れまではできたのですが、セッション管理をしていないので直接URLをたたくとどのページでも開いてしまいます。

【ファイル構成】
login.asp・・・ID・パスの入力画面
login_check.asp・・・入力されたID・パスがDBにあるか確認、OKならindex.aspへ
index.asp・・・トップページ

ネットで調べたところ、「global.asa」や「セッション管理」と言った言葉がキーなのかとは思います。
以下の私の解釈で問題ないか、また疑問点にご回答頂けたらと思います。

①ログイン時にID・パスがDBにあった場合セッションIDを作成。
②global.asaにセッションIDの有無を確認する文を記載し、index.asp以降のコンテンツページに記載
③直接index.aspにアクセスしてもセッションIDがなければリダイレクトでlogin.aspに飛ばす。
※1 セッションIDの作成はlogin_check.aspでよいのか?
※2 セッションIDはDBに保存?それとも勝手にWEBサーバーに保存される?

簡単なサンプルを交えてご回答いただけると助かります。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/30 22:33:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント100pt

セッションオブジェクトを利用するのが便利です。
http://msdn.microsoft.com/ja-jp/library/cc338731.aspx

global.asaはログイン/ログアウト関連の処理を記述するファイルなので、
セッション管理関係はglobal.asaに記述するということになります。

他1件のコメントを見る
id:windofjuly

phpの利用経験があるみたいなので、
phpのセッション変数と同じような使い方ができると回答したほうが良かったのかも…。

セッションオブジェクトを利用する利点は、
セッションタイムアウトによる削除なども自動的に対応してくれる点です。

自前でデータベースなどに書き込むような仕組みを利用する場合は、
ログアウトせずにリンクが切れた場合の対処なども自前で用意する必要があり、
イベントタイマー的な仕組みについても学び、実装、管理運用しばなければならず面倒なのです。

2012/10/30 18:28:19
id:finnapple

セッションオブジェクト利用して作ってみたいと思います。
ありがとうございました。

2012/10/30 22:32:56

その他の回答1件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

ポイント100pt

セッションオブジェクトを利用するのが便利です。
http://msdn.microsoft.com/ja-jp/library/cc338731.aspx

global.asaはログイン/ログアウト関連の処理を記述するファイルなので、
セッション管理関係はglobal.asaに記述するということになります。

他1件のコメントを見る
id:windofjuly

phpの利用経験があるみたいなので、
phpのセッション変数と同じような使い方ができると回答したほうが良かったのかも…。

セッションオブジェクトを利用する利点は、
セッションタイムアウトによる削除なども自動的に対応してくれる点です。

自前でデータベースなどに書き込むような仕組みを利用する場合は、
ログアウトせずにリンクが切れた場合の対処なども自前で用意する必要があり、
イベントタイマー的な仕組みについても学び、実装、管理運用しばなければならず面倒なのです。

2012/10/30 18:28:19
id:finnapple

セッションオブジェクト利用して作ってみたいと思います。
ありがとうございました。

2012/10/30 22:32:56
id:sanada33 No.2

回答回数293ベストアンサー獲得回数3

コレクション内の特定の項目には、一意の文字列キー、またはその名前を使用してアクセスすることができます。たとえば、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 オブジェクトの場合は、コレクション名を指定する方がより安全です。これは、コレクションに重複した名前を持つ項目が含まれる可能性が高いためです。

  • id:wild_yamato
     ASPを構築するのであれば、フレームワークを利用するのがよろしいかと思います。

     オンラインでの処理は複雑ですので、セッション管理をクリアしても多様な問題が出てきます。業務処理に重点を置くためには環境面での仕組みが用意されているフレームワークにアプリを組み込むのが得策です。

     老婆心まで
  • id:finnapple
    コメントありがとうございます。

    おっしゃる通りだと思いますが、諸事情でASP.NET等ではなくASPで構築することになっています。

    ちなみにASPでもフレームワークは提供されているのでしょうか?
    ASP.NET等でしたら検索で見つかったのですが・・・・
  • id:windofjuly
    うぃんど 2012/10/30 17:08:56
    雨の日(id:finnapple)さんの話題は、
    Active Server Pagesですね。

    無頼庵(id:wild_yamato)さんの話題は、
    Application Service Providerとの勘違いではないでしょうか?
  • id:windofjuly
    うぃんど 2012/10/30 20:10:53
    このコメント書き込みの時点の話になりますが、
    回答No.2は私の回答したリンク先の文章をコピペして回答に見せかけてますね。

    無料質問のほうに答えるほうが多い私としては、
    ポイントを掠め取られるのはさほど気にしてませんが、
    同じようなことを繰り返している人は許せませんね。

    200回ほどありますね。
    5分程度ならかぶることもありますが、今回などはおよそ2時間後ですね。
    そのほかにも多数ありますね。全部偶然だと言い張るのは難しいと思います。
    http://q.hatena.ne.jp/sanada33/

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません