2016-04-04 34 views
0

asp.netから従来のaspアプリケーションにユーザー名の値を渡そうとしています。しかし、ASPページが出てきたら、私は値を見ません。セッション変数を渡すための良いリンクがあれば、ここに投稿してください。私は複数のものを試しましたが、成功しません。aspxからaspへのセッション値の受け渡し

public static object Get(string name) 
    { 
     HttpContext context = HttpContext.Current; 
     object value = null; 
     String[] cookies = context.Request.Cookies.AllKeys; 
     for (int i = 0; i < cookies.Length; i++) 
     { 
      HttpCookie cookie = context.Request.Cookies[cookies[i]]; 
      if (cookie.Name.StartsWith("ASPSESSION")) 
      { 
       System.Uri uri = context.Request.Url; 

       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri.Scheme + "://" + uri.Host + ":" + "5500" + "/FinalPage.asp?mode=get&name=" + name); 
       request.Headers.Add("Cookie: " + cookie.Name + "=" + cookie.Value); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       Stream responseStream = response.GetResponseStream(); 
       System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 
       StreamReader readStream = new StreamReader(responseStream, encode); 
       value = readStream.ReadToEnd(); 
       response.Close(); 
       readStream.Close(); 
       break; 
      } 
     } 
     return value; 
    } 

    public static void Set(string name, object value) 
    { 
     HttpContext context = HttpContext.Current; 

     String[] cookies = context.Request.Cookies.AllKeys; 

     for (int i = 0; i < cookies.Length; i++) 
     { 
      HttpCookie cookie = context.Request.Cookies[cookies[i]]; 

      if (cookie.Name.StartsWith("ASPSESSION")) 
      { 
       System.Uri uri = context.Request.Url; 


       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri.Scheme + "://" + uri.Host + ":" + "5500" + "/FinalPage.asp?mode=set&name=" + context.Server.UrlEncode(name) + "&value=" + context.Server.UrlEncode(value.ToString())); 

       request.Headers.Add("Cookie: " + cookie.Name + "=" + cookie.Value); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       Stream responseStream = response.GetResponseStream(); 
       break; 
      } 
     } 
    } 

    protected void btnSEssion_Click(object sender, EventArgs e) 
    { 
     HttpContext context = HttpContext.Current; 
     System.Uri uri = context.Request.Url; 
     //Get("UserName"); 
     Set("UserName", UserName); 
     Response.Redirect(uri.Scheme + "://" + uri.Host + ":" + "5500" + "/FinalPage.asp"); 
    } 

ASPページ

Response.Write("This is FinalPage.asp<BR>") 
Response.Write "Shared Session Variable Names/Values between ASP.NET and  classic ASP:<BR>" 


Dim strMode, strName, strValue 
Response.Write "1<BR>" 

If Request.ServerVariables("REMOTE_ADDR") =  Request.ServerVariables("LOCAL_ADDR") Then 
Response.Write "2<BR>" 
strMode = Request.QueryString("mode") 
Response.Write strMode 
Response.Write "3<BR>" 
strName = Request.QueryString("name") 
Response.Write strName 
Response.Write "4<BR>" 
If strMode = "get" Then 
    Response.Write(Session(strName)) 
ElseIf strMode = "set" Then 
    strValue = Request.QueryString("value") 
    Session(strName) = strValue 
End If 
End If 
%> 
+0

あなたは何とかこれらを単一のアプリケーションとして作ったことがありますか?別々のアプリケーションであれば、セッションは別々のセッションになります。要求の値をクエリ文字列値またはPOST値などの別のアプリケーションに含めることによって、 "値を渡します"。 – David

+0

今はちょうどテスト中です。 1つは従来のASPにあり、もう1つはasp.netであるため、別々のアプリケーションになります。 – Anisha

+0

これを行う方法は間違いありませんが、私はそれらが簡単ではないと思います。私が過去に行ったことは、 "セッション転送"タイプのページがありました。ここでは、.netセクションから古典的なaspセクションに変換するとき、あなたはどこかで(私はデータベースを使用して)セッション情報を記録する必要がありますセッション転送は、他の「セッション」から保存されたトークンを介してセッションを確立し、そのトークンに基づいて保存されたセッション情報を引き出す。 – Kritner

答えて

2

別個のアプリケーションは、セッション状態を共有することはありません。

GET要求(リダイレクトが実行するもの)のURLに値を渡すためには、セキュリティのために何を意味するのか想像してみてください。それらの値はクエリ文字列上になければなりません。このような何か:

Response.Redirect(
    uri.Scheme + "://" + uri.Host + ":" + "5500" + "/FinalPage.asp" 
    + "?someKey=" + HttpUtility.UrlEncode(someValue) 
    + "&anotherKey=" + HttpUtility.UrlEncode(anotherValue)); 
    // and so on for any additional values 

それはどうあるべきかsomeKeysomeValue項目現在のコードから完全明らかに私にではありません。しかし、これらのキー/値のペアがどこにあっても、どこにあっても、リダイレクトにそれらを含める構造体です。


編集:値が何らかの方法で敏感であり、サーバ側コード外部に露出されるべきではない場合、代替的には非感受性を通過させることである(非識別)値れますサーバ側の格納データに相当する。

基本的に、両方のアプリケーションがアクセスできるデータベースにデータを格納します。そのレコードを書き込むときには、後でそのレコード(データベースから自動生成されたID、おそらくコードで生成したGUID、おそらく別のもの、それはあなた次第です)を読み取るための識別子があります。その識別子は、クエリ文字列に沿って次のアプリケーションに渡されます。次のアプリケーションは、その識別子を使用してデータベースからレコードをフェッチします。

データベース(あなたが覆われていること持っていると仮定した場合)からの読み出し/書き込みする方法の詳細に入るがなければ、意味構造は、のようになります。この中にターゲット・アプリケーション(クラシックASPで続い

var recordID = WriteToSharedDB(someValue, anotherValue); 
Response.Redirect(
    uri.Scheme + "://" + uri.Host + ":" + "5500" + "/FinalPage.asp" 
    + "?id=" + HttpUtility.UrlEncode(recordID); 

場合)クエリ文字列からidを取得し、それを使用してデータベースからデータを選択します。

+0

誰もが見ることができるようにクエリ文字列にセッション値を渡したくありません。 – Anisha

+2

@Anisha:その場合、両方のアプリケーションがアクセスできる共通の場所にそれらを保存する必要があります。データベースなど。 – David

+0

デーヴィッドありがとう。私はいくつかの記事を読んで、aspアプリケーションからaspアプリケーションにセッションデータを取得する別の方法があるかもしれないと考えました。 – Anisha

関連する問題