ASP セッション

  目次







  global.asa によるセッションの開始と終了の確認



  

<OBJECT 
	runat=Server
	scope=Session
	id=Fs
	progid="Scripting.FileSystemObject"
></OBJECT>
<SCRIPT language=VBScript runat=Server> 

' **********************************************************
' セッション開始
' **********************************************************
Sub Session_OnStart

	Dim LogFile

	Session.Timeout = 1

	Set LogFile = Fs.OpenTextFile( _
		"C:\temp\" & Session.SessionID & ".log" _
		, 8 _
		, True )
	LogFile.WriteLine _
		Now & " : Session Start | id = " & Session.SessionID _
		& " , Timeout = " & Session.Timeout

End Sub

' **********************************************************
' セッション終了
' **********************************************************
Sub Session_OnEnd

	Dim LogFile

	Set LogFile = Fs.OpenTextFile( _
		"C:\temp\" & Session.SessionID & ".log" _
		, 8 _
		, True )
	LogFile.WriteLine Now & " : Session End | id = " & Session.SessionID

End Sub

</SCRIPT>
  

  

2005/10/10 21:46:09 : Session Start | id = 318436797 , Timeout = 1
2005/10/10 21:48:09 : Session End | id = 318436797
  

Session_OnEnd の内容を少し変更してグローバルな関数として利用できるようにすれば、
セッション単位のログファイルへの書き込みになります



  入力画面とログイン画面

Session はサーバへのアクセスの無い一定の時間が経過するとタイムアウトして無効となる為、
処理に使用する Session 変数も空になります。その場合、ログインしなおして再度処理の先頭
へ移動する必要があります

entry.asp
  

<%
Call Response.AddHeader( "Content-Type", "text/html; Charset=shift_jis" )
Response.ExpiresAbsolute=#May 31,2000 23:59:59#

if Session("UserID") = "" then
	Session("ReturnPath") = Request.ServerVariables("SCRIPT_NAME")
	Server.Transfer "login.asp"
end if
%>

<HTML>
<HEAD>
<TITLE>ログイン</TITLE>
</HEAD>
<BODY>
<FORM method="GET" action="entry.asp">
	氏名
	<INPUT
		type=text
		name=In1001 
		value="<%= Request.QueryString("In1001") %>"
	>
	ふりがな
	<INPUT
		type=text
		name=In1002 
		value="<%= Request.QueryString("In1002") %>"
	>
	<INPUT type=submit value="送信">
</FORM>

<PRE>
<%
	For Each strKey In Session.Contents
		Response.Write strKey & " : " & Session(strKey) & vbCrLf
	Next
%>
</PRE>

</BODY>
</HTML>
  

Session("UserID") は、ログイン画面でセットされる Session 変数です。この内容が空の場合は
Session がタイムアウトした事を示す為、login.asp へジャンプしています

※ For Each strKey In Session.Contents で Session 変数を列挙しています

login.asp
  

<%
Call Response.AddHeader( "Content-Type", "text/html; Charset=shift_jis" )
Response.ExpiresAbsolute=#May 31,2000 23:59:59#

if Request.QueryString("UserID") <> "" then
	Session("UserID") = Request.QueryString("UserID")
	if Session( "ReturnPath" ) <> "" then
		Server.Transfer Session( "ReturnPath" )
	end if
end if
%>

<HTML>
<HEAD>
<TITLE>ログイン</TITLE>
</HEAD>
<BODY>
<FORM method="GET" action="login.asp">
	ユーザID
	<INPUT
		type=text
		name=UserID
		value="<%= Request.QueryString("UserID") %>"
	>
	<INPUT type=submit value="送信">
</FORM>
</BODY>
</HTML>
  

入力された値が空でなければ、セッション変数へユーザIDをセットし呼び出し元へジャンプしています。
※ 実際のアプリケーションでは、データベースよりパスワードを読み出して、一致した場合にのみこの処理を行ないます

また、ログイン画面でセッションのタイムアウトが発生した場合は、Session( "ReturnPath" ) が空になっているので、
その場合の処理を追加する必要があります( メニューへジャンプ等 )




  Session オブジェクトに配列を格納する

以下のコードで格納します

  
<%
	Dim MyArray()
	Redim MyArray(5)
	MyArray(0) = "AAA"
	MyArray(1) = 100
	MyArray(2) = "CCC"
	MyArray(3) = 101
	MyArray(4) = "BBB"
	MyArray(5) = 102

	Session("MyArray") = MyArray
%>
  

以下のコードで一覧表示します

  
<PRE>
<%
	For Each strKey In Session.Contents
		if IsArray( Session(strKey) ) then
			For i = 0 to Ubound( Session(strKey) )
				Response.Write strKey & " : " & i & " : " _
					& Session(strKey)(i) & vbCrLf
			Next
		else
			Response.Write strKey & " : " & Session(strKey) & vbCrLf
		end if
	Next
%>
</PRE>
  

配列の値の変更は、Session 変数に直接アクセスせずに行なう必要があります
いったん配列へ取り出し、配列を変更してから再度セッション変数へ格納します

  
<%
	Dim MyArray

	MyArray = Session("MyArray")

	MyArray(0) = "XYZ"
	MyArray(1) = 100
	MyArray(2) = "XYZ"
	MyArray(3) = 101
	MyArray(4) = "XYZ"
	MyArray(5) = 102

	Session("MyArray") = MyArray
%>
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ