• 締切済み

データ受け渡し時のSessionの使い方

いつもお世話になっております。 現在A.aspからB.aspにデータを渡したいと考えています。 Sessionを用いてA.asp上のリンクからClickする箇所によって引数をかえて、Bに渡したいのですが、Aの最下層に書かれたSessionのみが渡る状態です。 (下記の例で言うと、どれをクリックしても333が表示されます。) 簡単で申し訳ありませんが、下記にソースを書きます。 何かお気づきの点があれば、ご教授ください。 宜しくお願い致します。 ※A.aspの内容 <% session("key") = "111" Response.Write "<a href=""B.asp""> データ1</a>" %> <% session("key") = "222" Response.Write "<a href=""B.asp""> データ2</a>" %> <% session("key") = "333" Response.Write "<a href=""B.asp""> データ3</a>" %> ※B.aspの内容 <html> <head> </head> <%Response.Write session("key")%> </HTML>

みんなの回答

回答No.2

あえて Session で無ければいけない理由がないのであれば ※A.aspの内容 <%Response.Write "<a href=""B.asp?key=111"">データ1</a>"%> <%Response.Write "<a href=""B.asp?key=222"">データ2</a>"%> <%Response.Write "<a href=""B.asp?key=333"">データ3</a>"%> ※B.aspの内容 <%Response.Write Request.QueryString("key")%> で良いのでは? osamuyさんの仰るとおり、ASPはサーバ側で処理されるので、 <% session("key") = "111" Response.Write "<a href=""B.asp""> データ1</a>" %> <% session("key") = "222" Response.Write "<a href=""B.asp""> データ2</a>" %> <% session("key") = "333" Response.Write "<a href=""B.asp""> データ3</a>" %> と書いても、先に<% %>内のASPがサーバ側で処理されるので サーバ側の処理--------------------------------------------------- session("key") = "111" ←"111"が格納される session("key") = "222" ←"111"は上書きされて"222"が格納される session("key") = "333" ←"222"は上書きされて"333"が格納される -----------------------------------------------------------------  ↓ 処理結果--------------------------------------------------------- session("key")には"333"が格納されている <a href="B.asp"> データ1</a> <a href="B.asp"> データ2</a> <a href="B.asp"> データ3</a> -----------------------------------------------------------------  ↓ クライアント(ブラウザ)側--------------------------------------- 処理結果を受信 ----------------------------------------------------------------- となります。 蛇足ですが、 <%Response.Write "<a href=""B.asp?key=111"">データ3</a>"%> はサーバ側でHTMLを書く意外に何も処理してないので、 <a href="B.asp?key=111">データ3</a> とそのままHTMLで書いても同じです。 渡す値がASPの変数(例えば、変数 i )であれば、 <% Response.Write "<a href=""B.asp?key=" & i & """>データ3</a>" %> と書いてもいいですが、 <a href="B.asp?key=<% Response.Write i %>">データ3</a> と書くこともできますし、もっと簡単に <a href="B.asp?key=<%=i%>データ3</a> と書くこともできます。 <% Response.Write "~" %> は <%="~"%> に省略できるので HTMLに挟み込む場合はむしろ省略形の方が一般的です。 #余分な情報でしたか?(^^;)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

ASPはサーバ上で実行されますので、A.aspの評価が完了した時点で、Session("key")の値は、333になります。データ1及びデータ2で行ってる代入は無駄ですね。 また、B.aspで評価できるRequestには、どのリンクを押したのか判断つく情報が記述されてません。 A.aspで<a href="B.asp?req=1">data 1</a>のように記述するのがてっとりばやいかと。 ここらへんオブジェクトRequestやServeVariablesの内容を一覧して、どういうリクエストが送られてきるのか調べてみると、理解が速まると思います。

関連するQ&A

  • データ受け渡し時の維持

    いつもお世話になっております。 現在A.aspからB.aspにデータを渡したいと考えているのですが、その間にユーザ認証の処理"C.asp"を入れているため、上手く渡りません。 Aで送ったデータをCが処理している間も持ち続け、Bに渡したいのです。Cはシステム上、他のファイルも参照するファイルなので、できればAもしくはBのみに手を加えることで解決したいと考えております。 現在の状況として、ユーザ認証直後は真っ白なBの画面が出て、再度Aに戻ってもう一度Bに飛ぶと認証済みのため、Aのデータ"hoge"がBにきちんと表示されます。 簡単で申し訳ありませんが、下記にソースを書きます。 何かお気づきの点があれば、ご教授ください。 宜しくお願い致します。 ※A.aspの内容 <% Response.Write "<a href=""B.asp?key=hoge""> B.aspへ</a>" %> ※B.aspの内容 <!--#include VIRTUAL="C.asp"--> <html> <head> <%Dim key2 key2 = Request.QueryString("key") %> </head> <%Response.Write url2%> </HTML> ※C.aspの内容 (長いので抜粋です) <%Option Explicit%> <%Response.Buffer = True Sub chkUser_Main() If chkUser_VerifyAuthorization() = False Then Response.Clear Session.Contents("LoginCaller") = Request.ServerVariables("SCRIPT_NAME") Response.Redirect "/login.asp" Response.End End If End Sub Function chkUser_VerifyAuthorization() chkUser_VerifyAuthorization = False Dim tUid, tPswd tUid = Session.Contents("SessionKey") tPswd = Session.Contents("Password") If (tUid = "") Or (tPswd = "") Then Exit ...続く

  • データーの受け渡し

    ASP1というフォルダーにA.ASPとB.ASPが入っていて ASP2というフォルダーにB.ASPが入っています。 B.ASPは両方とも同じ物です。 A.ASPの処理で条件に合ったらB.ASPそうでなければASP2のB.ASPを表示するような仕組みになっています。 この時にsessionを使ってユーザーID等を送っていますが、ASP2のホルダーのB.ASPでは画面は変わりますがデーターを受け取る事ができません。ファイル名を変えてASP1のホルダーに入れると正常に動作します。 IISの設定も関係あるのでしょうか? ASP1 A.ASP <% session("id")=uid if ab = 0 then %> location.href ="/ASP1/B.asp"; <% else %> location.href="/ASP2/B.asp"; <%end if %> B.ASP <% uid=session("id") %> ASP2 B.ASP <% uid=session("id") %> IIS5.0です  どなたかご教授お願いします。

  • データの受け渡し

    A.aspで入力されたFormデータをGETで送信し B.aspで内容を判断し、C.aspまたはD.aspにデータを受け渡す。 という事を行いたいと考えています。 B.aspのソースは下記の感じです。 If Request.QueryString("Add") = "C" THen Response.Redirect "C.asp" Else Response.Redirect "D.asp" End If C及びDへデータを受け渡すには、どのようにしたらよいでしょうか? また、今回GETを利用していますがPOSTを利用して同様な事は出来るのでしょうか? よろしくお願い致します。

  • データの受け渡しについて

    全くの初心者にHELPをお願いします。 A=日本 のようなデータがありまして、 VBでは Response.Write "<http://****.asp?country=" & A & ">" のような感じにすると指定のページにて country=日本といったように引渡しができていましたが、 ASPではどのようにやるのでしょうか? まったくわかっていないので質問自体が見当違いでしたらそれもあわせてご指摘ください。 .asp?以降が5%%E・・・みたいな文字化け(?)にならなくてもかまわないので教えてください。

  • データの受け渡しについて

    ASP初心者です。宜しくお願いします。行いたい内容は、a.aspで入力したデータを、b.aspでORACLEに登録する処理と考えております。 下記のような入力フォームがあったとします。a.asp実行を行うと、下記のような画面イメージが表示されます。 図書名(図面名) 型式 分類コード テキストボックスa1 テキストボックスb1 テキストボックスc1 テキストボックスa2 テキストボックスb2 テキストボックスc2 ・ ・ ・ テキストボックスa10 テキストボックスb10 テキストボックスc10 各列に10個づつ入力フィールドが存在し、データが入力されている分だけORACLEに新規追加を行いたいと考えております。MAXは10行で設定しています。どのようにしたら良いか皆目検討がつきません。以上、宜しくお願い致します。

  • サーバー上の全セッション変数を取得する方法

    お世話になります。 ASPでは、各クライアントで使用する変数をセッション変数に保管することができます。 セッション変数は、サーバーのメモリ上で保管されているというそうです。 サーバー上で、現在保持しているセッション変数を、全て取得(表示)したいのですが、 いろいろ調べましたが、わかりませんでした。 ご存知の方アドバイスいただけないでしょうか? よろしくお願いいたします。 ちなみに、クライアントで、 下記を実行すると、そのクライアントのセッション変数は取得できます。 Dim Key For Each Key in Session.Contents Response.Write Key & "=" & Session.Contents(Key) & "<BR>" Next

  • ASP.Net Session管理について

    ASP.Net 2.0 で開発をする初心者です。 Session管理について教えてください。 ログインページからいくつかのサブページに渡る際     Response.Redirect("~/A.aspx") それぞれのページでセッション設定しないといけないのでしょうか?     Session("Key") = Me.TextBox1.Text よろしくお願い致します。 Login.aspx --- Menu.aspx--|--- A.aspx                  |--- B.aspx                       |--- C.aspx                            |--- D.aspx                  |--- E.aspx

  • データの受け渡し

    A.aspのデータを B.aspに受け渡すのはどうしたら良いのでしょう教えて下さい。 TEXTBOXからのデータの受け渡しではないです。

  • 古いセッションが消えない

    フォームからのデータを受け取るPHP、sesssion.phpが下記のとおりだとします。 <? header('Cache-Control: nostore, no-cache, must-revvalidate'); session_cache_limiter('private_no_expire'); session_start(); header("Content-Type: text/html; charset=EUC"); $http = $_SERVER['HTTP_REFERER']; //どこから来たか $form_id = $_POST['form_id']; $form_pass = $_POST['form_pass']; $flg = $_POST['t']; $session = session_id(); if($http == "http://192.168.1.250/~fukazawa/session/form.html"){ $_SESSION['id'] = $form_id; $_SESSION['pass'] = $form_pass; } $test = $_SESSION['id']; $test1 = $_SESSION['pass']; if($flg == "t"){ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <br><br><br><a href="session.php">test</a><br><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; }else{ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <a href="session.php">test</a><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; } ?> 引数で表示させる内容を異なるようにするPHPファイルです。 仮に一回目にIDを「てすと」、パスワードを「ttt」でログインした場合、session.php・session.php?t=testに表示されるのは、 「◎てすと ttt」 です。 そして、これをいったんログアウトして、今度は ID「二回目」、パスワード「two」でログインすると、 session.phpには 「◎二回目 two 」と表示されますが、 session.php?t=test に飛んだ場合、 一回目のIDとパスワード、つまり 「◎てすと ttt」 が表示されてしまいます。 ブラウザをリロードすると 「◎二回目 two 」 と表示されます。 これは、前のセッションがまだ残ってしまっているということなのでしょうか。 対処法が分からず困っています。

    • ベストアンサー
    • PHP
  • セッション変数の受け渡しができない

    a.php: <?php session_start(); $_SESSION['test'] = "ok"; echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "<a href=\"./b.php\">結果ページへ</a>"; echo "</body></html>\n"; ?> b.php: <?php session_start(); echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "</body></html>\n"; ?> a.php の表示: array(1) { ["test"]=> string(2) "ok" } 結果ページへ b.php の表示: array(0) { } 再読込みでも同様です。 php.ini の Session 関係の項目は書籍やウェブサイトを参考にしておかしなものはないと自己判断していますが、指摘されるものを掲載します。

    • 締切済み
    • PHP

専門家に質問してみよう