• 締切済み

フレームを使用した際のセッションについて

初めて投稿させて頂きます。 現在ServletとJSPを使ったプログラミングを行っております。 その中で、"フレームを使用した際にセッションのデータが引き継がれない"という現象が起きてしまい、 どうにも進めることができなくなってしまいました。 下記に詳しく内容を記述します。 ページの流れとしては、 1.ログインJSP(login.jsp)にてIDとパスを入力 ↓ 2.入力されたものをServlet(Login.class)が受け取りデータベースと照合 ↓ 3.IDとpassが一致している場合にframeset用のJSP(fs.jsp)に遷移 (RequestDispatcherにパスを指定→forword) ↓ 4.frameset用のJSPからフレームA(frameA.jsp)とフレームB(frameB.jsp)のJSPを呼びだす という流れです。 fs.jspまではsessionのデータが引き継がれているのですが、 frameA.jsp、frameB.jspでsessionのデータを参照することができません。 セッションIDの取得を試みた所、fsとframeAとframeB、すべてのIDが違う状態です。 ローカル上で動かす場合には問題なくセッションが引き継がれるのですが、 (セッションIDが同一であり、中にあるIDやパスの情報を取得することができる。) サーバー上にあげるとうまく引き継ぐことができません。 サーバー側でファイルの呼び出しの際、マシン名が違う時にセッションが別で生成されるという仕様を見たことがあるので、 それが原因なのかとも思っているのですが、framesetで書いているリンクや、Tomcatのコンテキストルートの修正等を行ってみましたがうまくいきませんでした。 Javaのバージョンは1.6.0、tomcatのバージョンは6.0です。 もし質問が何かズレていたり、何か必要な情報が足りないようでしたら恐れ入りますがその部分も指摘して頂けたら嬉しいです。 どうか皆様の知恵をお貸しください。宜しくお願いします。

  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

  • dakusui
  • ベストアンサー率50% (1/2)
回答No.2

JSPのほうで、セッションを取得しているのですね? 私とは違うスタイルなので、いいアドバイスができるかは微妙ですが・・・。 現在の状況は・・・ 1. login.jsp:<@page session="false"> 2. LoginServlet:HttpSession#getSession(true) - ログイン成功時 3. fs.jsp:<@page session="true"> 4. frameA.jsp, frameB.jsp:<@page session="true"> LoginServlet以外にサーブレットはない、ということであっていますか?

  • dakusui
  • ベストアンサー率50% (1/2)
回答No.1

4. で行っているであろうgetSessionですが、引数はtrue / false / なし、どれでしょうか? true またはなしであるとすると、 セッションのタイムアウト期間が何らかの理由で極端に短く設定されていたりはしないでしょうか? 確認の方法ですが、↓これが参考になるかと思います。 http://www.javaroad.jp/bbs/answer.jsp?q_id=20060915133932423

goo-spash
質問者

お礼

dakusui様、ご回答ありがとうございます。 返信が遅れてしまい大変申し訳ありません。 御指摘の件の引数についてですが、現在4で使用しているjsp2件についてはgetSessionを行っておりません。 (getSessionというのはこのような↓ものだと認識しておりますが、間違ってないでしょうか。 HttpSession session = request.getSession(true);) というのも、その前の段階であるfs.jspの方ではgetSessionを行っておらず、変わりにjsp最上部で <%@ page session="true" %> というような記述をしており、それによって(?)fs.jspの段階ではセッションの値を取得できていたためです。 ですが、御指摘通りgetSessionを明示的に記述せずにやっていたことが原因かとも思い、getSessionを追記実装してみましたが、エラー(Duplicate local variable session)を吐いてしまいうまく実装することができませんでした。

関連するQ&A

  • セッション管理

    度々の質問で申し訳ないです…。 「セッション管理」がどうしてもよく分かりません。 書籍やWeb上でいろんな説明を読んで頭では理解したつもりなんですが 実際使う段になるとつまづいてしまいます。 そこで質問です。 html → Servlret1 → JSP1 → Servlet1 → JSP2 → JSP3 このような遷移の中でセッション管理を行いたいと思っています。 今、JSP2までは無事にセッションオブジェクトに保存されたデータを 参照することができていますが、JSP2からJSP3に移るときに nullが渡されてしまうのです。 一度、Servlet1 へ制御を戻さなければだめなのでしょうか? 具体的なコードを以下に掲載します。 よろしくお願いします。 ========= Servlet1 でセッション開始 //セッションを得る HttpSession thisSession = req.getSession(true); //セッションに保存 req.getSession(false).setAttribute("Login","true"); ========= JSP2 で受け取る /* ここではちゃんと"true"が返ってきます。 */ //セッションオブジェクトから取り出す String login = (String)request.getSession(false).getAttribute("Login"); ========= JSP3 で受け取る /* ここで null が帰ってきてしまいます。 String login = (String)request.getSession(false).getAttribute("Login");

  • RequestDispatcher.forwardメソッドで遷移する際のURL

    お世話になります。 JSP/サーブレットを使用してwebアプリケーションを作成しています。 タイトルの通りRequestDispatcher.forwardメソッドで遷移する際のURL についてうまくいかず、原因がわからない為質問させて頂きます。 ご教授宜しくお願い致します。 Aproject/jsp/login.jsp Aproject/jsp/top.jsp Aproject/WEB-INF/src/servlet/Login.java という3つのファイルを使用しています。 login.jspにて<form action="../Login" method="post">で Login.javaサーブレットにIDとパスワードを渡し、 サーブレットで認証を行ったあと RequestDispatcher.forwardメソッドにて以下のように 遷移するようになっています。 RequestDispatcher rd = request.getRequestDispatcher("./jsp/top.jsp"); rd.forward(request, response); 遷移はうまくいくのですが、top.jspが表示される時のURLが http://localhost:8080/Aproject/jsp/top.jspとなるはずが、 http://localhost:8080/Aproject/Login となってしまいます。 web.xmlの記述は <servlet> <servlet-name>Login</servlet-name> <servlet-class>servlet.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/Login</url-pattern> </servlet-mapping> としています。 forwardメソッドではなく、sendRedirectメソッドを使用した場合 http://localhost:8080/Aproject/jsp/top.jsp とうまくいきます。 どのような原因が考えられますでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 画面遷移でセッション切れになります

    いつもお世話になっております。 サーブレットを使用した画面遷移で jsp(ログイン)→servlet(ログイン確認)→jsp(メニュー) →servlet(データ取得)→jsp(データ一覧表示) という流れで画面遷移を行っていたのですが、 二つ目のjsp(メニュー)まではセッションが残っているのですが 次のservletに遷移した瞬間セッションがが切れてしまいnullを検出してしまいます。 はじめのservlet(ログイン確認)にて getAttributeを使用しセッションを残していたのですが、 セッション切れの原因がわかりません。 セッション切れする原因はなんなのでしょうか。 皆様の知恵をお借りできれば幸いです。

    • ベストアンサー
    • Java
  • サーブレットから別フレームのパラメータを取り出すことは可能でしょうか?

    はじめまして。 JAVA&サーブレット初心者です。 現在、サーブレット、JSPを使ったWEBアプリケーションの開発をしてお ります。 左右二つに分かれたフレームを持つWEBアプリケーションを作っています。 大まかな流れとしては以下の通りです。  (1)左側のフレーム(仮にleft.jspとします)からサーブレット  (仮にservlet1とします)を呼び出す。  (2)右側フレームに(1)の処理結果のJSP(right1.jsp)を呼び出す  (3)right1.jspでサーブレット(servlet2)を呼び出す。  (4)右側フレームに(3)の処理結果のJSP(right2.jsp)を呼び出す。  (5)right2.jspでサーブレット(servlet3)を呼び出す。  (6)右側フレームに(5)の処理結果のJSP(right3.jsp)を呼び出す。   上記のように左側フレームが固定で右側フレームのJSPがサーブ  レット処理によって切り替わるようなWEBアプリケーションを開発し  ています。    問題なのは、今回開発しているシステムの要件により、(5)で呼び出され るサーブレット(servlet3)内の処理で左側のフレーム(left.jsp)の入力 パラメータが必要だということです。  servlet1でleft.jspの入力パラメータをセッションオブジェクトに保管 し、servlet3でセッションオブジェクトから復元すれば実現は可能かと思 いました。  しかし、途中servlet2からの処理が大変重いものであり、セッションオ ブジェクトは一定時間がたつと無効になってしまうと聞いたのでタイトル のような方法を考えたのですが、見当がつかず、今回の質問に至りました。  request.getParameter("****"); ではもちろん取り出せないと思いますが、サーブレットで別フレームのパ ラメータを取り出すことは可能でしょうか?

    • ベストアンサー
    • Java
  • topから孫フレームへのアクセス方法

    トップフレームから↓の感じでフレーム階層を作っています。 [topフレーム] ... <iframe src="子.jsp"/> ... [子.jsp] <frameset rows="50%,50%" id="ko">  <frame src="孫1.jsp" id="mago1"/>  <frame src="孫2.jsp" id="mago2"/> </frameset> topフレームから「孫1.jsp」「孫2.jsp」内の要素にJavaScriptでアクセスする方法があれば教えてください。

  • リダイレクトループの原因をは?SESSION?

    フレーム3つ程分けて、SESSIONを使ったメンバーページを作成しています。 今の状況なのですが、 メニューフレームのリンクを押して、メインのフレームを切り替えるのは問題ないのですが、 ブラウザの更新またはF5で更新すると、メニューフレームがループします。 すみません、情報が少ないのですが、 メニューおよびメインページにsession.phpを外部ファイルとして利用して、います。 原因を見つけたいのですが、なかなか特定できず、 どのような箇所を注意して見ればよいか、お教えいただき、ご質問させていただきました。 何卒宜しくお願い致します。 参考になるのかわからないのですが、 session.phpファイルの内容をすべて下記に記載させていただいております。 <?php session_start(); if( $_SESSION["login_id"] == "" ){ $login_url = "http://{$_SERVER["HTTP_HOST"]}/member/"; header("Location: {$login_url}"); exit; }else{ $UserName = $_SESSION["name"]; $LoginId = $_SESSION["login_id"]; $No = $_SESSION["no"]; $url = $_SESSION["url"]; $Pass = $_SESSION["pass"]; }

    • ベストアンサー
    • PHP
  • Struts:フレーム内JSPからcssファイルの参照方法

    htmlタグライブラリのframeで指定したJSPからスタイルシート(*.jsも)の参照ができません。 色々試したのですが、解決方法を教えて下さい。。。 環境はWin2000、Tomcat5、Struts2です。 ↓フレーム呼び出し <frameset rows="50%,*"> <html:frame page="A.jsp"/> <html:frame page="B.jsp"/> </frameset> ※ディレクトリ:/apname/jsp/X.jsp ↓フレーム内(A.jsp) <link rel="stylesheet" href="./C.css" type="text/css"/> ※ディレクトリ:/apname/css/C.jsp ちなみに「href="../css/C.css"」としてもダメなんです。 参照先ディレクトリは色々試したけど使えません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • ServletでSessionの一覧を取得

    ServletでSessionの一覧を取得を取得し、 選択したセッションIDを無効するという画面を作成したいと 思っています。 ↓下記URLではServlet API v2.1 以降で廃止されたとあります。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=401&forum=12 しかしながらTomcatの管理画面(Tomcat Webアプリケーションマネージャ ) http://localhost:8080/manager/html の画面ではセッションという項目があってそこをクリックするとまさに やりたかったことが実現されています。 なにか特殊な方法を使用して作成しているのでしょうか。

    • ベストアンサー
    • Java
  • PHPでのセッション管理について

    こんにちは。 PHP初心者の者ですがよろしくお願いします。 現在、ログイン時にセッションを登録し、 メイン画面を表示している部分でセッションを 取得したいのですがうまく取得できません。 メイン画面は、フレームで2つに分割してあります。 ご協力お願いします。 ソースの一部 【a.php】 // セッション名の指定 session_name('my_session'); // ページキャッシュ session_cache_limiter('nocache'); // 情報の保存期間(30分) session_cache_expire(30); //セッション開始 session_start(); $_SESSION["id"]=$_POST["id"]; $_SESSION["pw"]=$_POST["pw"]; $_SESSION["user_cd"]=$user_cd; $_SESSION["syain_name"]=$syain_name; $sid = session_id(); //接続先指定 header("Location: http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"])."/frame.php?PHPSESSID=$sid"); ?> 【frame.php】 <frameset rows="*" cols="151,*" framespacing="0" frameborder="1" border="0"> <frame src="menu.php" name="leftFrame" scrolling="NO" noresize> <frame src="main.php" name="mainFrame"> </frameset> 【menu.php】 <?php session_start(); $id = $_SESSION["id"]; $user_cd = $_SESSION["user_cd"]; $syain_name = $_SESSION["syain_name"]; print $syain_name."<br>"; //←何も表示されない ?>

    • ベストアンサー
    • PHP
  • strutsでフレームの分割ができません。

    strutsで、 http://struts.wasureppoi.com/taglib/03_frame.html を見ながらフレームの分割を下記のように行おうとしていますが、エラーが表示されます。 ソース ---- <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-nested" prefix="nested" %> <html:html> <head> <title>テスト</title> </head> <frameset cols="30%,*"> <html:frame page="l.jsp"/> <html:frame page="r.jsp"/> </frameset> </html:html> ---- エラーメッセージ ---- HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: Exception in JSP: /index08.jsp:13 10: <title>テスト</title> 11: </head> 12: <frameset cols="30%,*"> 13: <html:frame page="l.jsp"/> 14: <html:frame page="r.jsp"/> 15: </frameset> 16: </html:html> Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) 原因 java.lang.NullPointerException org.apache.struts.taglib.TagUtils.pageURL(TagUtils.java:1070) ---- 別のページを見ると、 <html:frame page="l.jsp" name="hidari"/> とname属性を宣言しているようですが、同様に記述してみると、スコープが無いとエラーが出てしまいます。 環境は、  WindowsXP  Eclipse3.3  Tomcat5.5  struts-1.3.8  JDK1.5 です。 どのように記述すべきか、検索してもヒットしなかったので、恥かしながらここで質問させて頂く事にしました。 どのように直すべきか、分かる方がいらっしゃいましたらご教授頂けないでしょうか?  また、オススメのStrutsの本がありましたら、こちらも教えて頂けたら幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう