セッションとログイン画面


  メニュー画面 と ログイン画面




セッションオブジェクトに、ユーザIDがセットされているかいないかで、メニュー画面を表示するかログイン画面を表示するかを決定します。一度でもログインしていた場合は、ブラウザが閉じられるか、セッションのタイムアウトまで再びログイン画面に移動する事はありません。

セッション項目は、"UserName""TargetURL" という二つでコントロールします
( session は、HttpSession クラスです )

画面の移動には、forward では無く sendRedirect を使用します。forward は前の画面の情報を引き継ぐので、別処理間で使用すると思わぬ結果になります

  

<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=Shift_JIS"
%>
<%
// *********************************************************
// menu.jsp
// *********************************************************
	out.println( session.getMaxInactiveInterval() + "<br>" );

// *********************************************************
// セッションオブジェクトの取得
// *********************************************************
	Object UserName;
	UserName = session.getAttribute( "UserName" );

	// *****************************************************
	// 未ログインならば、login.jsp へ移動
	// *****************************************************
	if ( UserName == null ) {
		session.setAttribute( "TargetURL", "menu.jsp" );
		application.log( "menu.jsp --> login.jsp"  );
		response.sendRedirect( "login.jsp" );
		return;
	}

// *********************************************************
// 以下画面定義
// *********************************************************
%>
<HTML>
<BODY>
<CENTER>
<H1>メニュー</H1>
<A href=act1.jsp>処理1</a><br><br>
<A href=act2.jsp>処理2</a><br><br>
</CENTER>
</BODY>
</HTML>

  

先頭でセッションのタイムアウト時間を表示しています。セッションをテストするのに、デフォルト(1800秒) では長すぎる為、login.jsp で 10 秒に変更しています。タイムアウトのテストと言うのは、画面を表示したままほったらかしにしておいて、その画面から再び処理しようとした時にはセッションが無効になっているという想定です。同様に、URL を指定して menu 以外の画面から処理しようとする事も想定しています。

タイムアウト関係を処理する getMaxInactiveInterval と setMaxInactiveInterval は例外を発生しません。他の殆どのセッション関係のメソッドは、セッションが無効となっている時に実行すると例外が発生するようになっていますが。どうも、そうでも無いようです。厳密にテストしなければ解りませんが、getAttribute ではそのような事がおこりませんでした。

  

<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=Shift_JIS"
%>
<%
// *********************************************************
// login.jsp
// *********************************************************
	session.setMaxInactiveInterval(10);
	out.println( session.getMaxInactiveInterval() + "<br>" );

// *********************************************************
// 入力データの取得
// *********************************************************
	String UserName;
	UserName = request.getParameter( "UserName" );

// *********************************************************
// 入力データのチェック
// *********************************************************
	if ( UserName != null ) {
		if ( UserName.equals( "lightbox" ) ) {
			// *********************************************
			// いったんセッションが無効になっていた場合
			// *********************************************
			if ( session.getAttribute( "TargetURL" ) == null ) { 
				session.setAttribute( "TargetURL", "menu.jsp" );
			}

			// *********************************************
			// ユーザ名をセット
			// *********************************************
			session.setAttribute( "UserName", UserName );

			// *********************************************
			// 呼び出し元へ移動
			// *********************************************
			String Target;
			Target = session.getAttribute( "TargetURL" ).toString();
			application.log( "login.jsp --> " + Target );
			response.sendRedirect( Target );
			return;
		}
	}

// *********************************************************
// 以下画面定義
// *********************************************************
%>
<HTML>
<BODY>
<CENTER>
<H1>ログイン</H1>
<FORM method="post" action="login.jsp">
	ユーザ名&nbsp;&nbsp;<INPUT type="text" name="UserName">
	<INPUT type="submit" name="send" value="送信">
</FORM>
</CENTER>
</BODY>
</HTML>

  

ちゃんと動くようになるまで、想像しずらい動きをしますので、application.log というログ出力を行なっています。このログは "C:\Tomcat5.0\logs" に出力されます。








  一般処理画面 と ログイン画面




基本的に menu.jsp と同じです。普通は、セッションが無効となった状態でこの画面にアクセスすると、ログイン画面へ誘導されてログイン確認後この画面へ戻ってきます。もし、ログイン画面でセッションが無効になった場合は、ここではなくメニューへ誘導されます。

  

<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=Shift_JIS"
%>
<%
// *********************************************************
// act1.jsp
// *********************************************************
	out.println( session.getMaxInactiveInterval() + "<br>" );

// *********************************************************
// セッションオブジェクトの取得
// *********************************************************
	Object UserName;
	UserName = session.getAttribute( "UserName" );

	// *****************************************************
	// 未ログインならば、login.jsp へフォーワード
	// *****************************************************
	if ( UserName == null ) {
		session.setAttribute( "TargetURL", "act1.jsp" );
		application.log( "act1.jsp --> login.jsp" );
		response.sendRedirect( "login.jsp" );
		return;
	}

// *********************************************************
// 以下画面定義
// *********************************************************
%>
<HTML>
<BODY>
<CENTER>
<H1>処理1</H1>
</CENTER>
</BODY>
</HTML>

  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[jsp]
claudebot
24/03/29 15:13:06
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube