2016-04-04 25 views
0

Asp.net'den klasik asp uygulamasına bir kullanıcı adı değeri iletmeye çalışıyorum. Ancak ASP sayfası çıktığında herhangi bir değer görmüyorum. Oturum değişkenlerini geçmek için iyi bir link varsa lütfen buraya gönderin. Birden çok denedim ama başarı elde etmedim.Geçiş değerlerini aspx'ten asp'e geçirme

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 sayfa

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

Bunları bir şekilde tek bir uygulama olarak yaptınız mı? Eğer ayrı uygulamalarsa, tabiki ayrı oturumları olacak. İstekte bulunan değeri, ayrı bir uygulamaya, sorgu dizesi değeri veya POST değeri veya bu türden bir şey olarak ekleyerek "bir değer iletirsiniz". – David

+0

Şu anda sadece test ediyorum. Klasik ASP ve diğeri asp.net olduğu için ayrı bir uygulama olacaklar. – Anisha

+0

Bunu yapmanın kesinlikle yolları var, ama onların önemsiz olduğunu düşünmüyorum. Geçmişte yaptığım şey bir "ession transfer" tip sayfası, bir .net bölümünden klasik bir asp bölümüne dönüştürdüğümde, oturum bilgilerinin bir yere (bir veritabanı kullandım) kaydedilmesi gerekiyordu. oturum aktarımı, diğer "oturumdan" kaydedilmiş bir belirteç aracılığıyla bir oturum kurar ve kaydedilen oturum bilgisini bu simgeye göre çeker. – Kritner

cevap

2

Ayrı uygulamalar oturum durumunu paylaşmaz. (Sadece aynı sunucuda çalışan herhangi bir uygulamanın oturum durumunu okuyabilseydiniz, güvenlik için ne anlama geldiğini hayal edin.)

Değerleri bir GET isteğindeki bir URL'ye iletmek için (bu, bir yönlendirme gerçekleştirir) Bu değerler sorgu dizesinde olmalıydı. Böyle bir şey:

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

O bana açıkçasomeKey ve someValue ürün ne olması gerektiği geçerli kod tamamen değil. Ama bu anahtar/değer çiftleri ne olursa olsun, ya da onları nereden alırsanız alın, onları yeniden yönlendirmeye dahil eden yapı budur.


Düzenleme: değerleri bir şekilde hassas olan ve sunucu tarafındaki kodu dışında maruz kalmaması gereken ise ardından alternatif bir hassas olmayan (de tanımlanan) değerini geçmesi olan sunucu tarafında saklanan verilere karşılık gelir. Temel olarak, verileri her iki uygulamanın da erişebileceği bir veritabanında saklayın. Bu kaydı yazarken, daha sonra bu kaydı okumak için bir çeşit tanımlayıcıya sahip olacaksınız (belki de veritabanından otomatik olarak oluşturulmuş bir kimlik, belki kodda oluşturduğunuz bir GUID, belki başka bir şey, size kalmış). Bu tanımlayıcı, sorgu dizgisinde bir sonraki uygulamaya geçirilecekti, bu da kaydı veritabanından almak için bu tanımlayıcıyı kullanacaktı. bunda

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

(Klasik ASP:

bir veritabanından okuma/yazma konusunda detaya inmeden

, anlamsal yapısı gibi bir şey olurdu (varsayarsak örtülü olduğunu var) durumda) id sorgu dizesinden alırsınız ve veriyi veritabanından seçmek için kullanırsınız.

+0

Herkesin görmesi için sorgu değerlerinde oturum değerlerini geçmek istemez. – Anisha

+2

@Anisha: Bu durumda, her iki uygulamanın da erişebileceği ortak bir konumda depolamanız gerekir. Bir veritabanı gibi. – David

+0

Teşekkür ederim David. Bazı makaleleri okudum ve oturum verilerini aspx'ten asp uygulamasına götürmenin başka bir yolu olabileceğini düşündüm. – Anisha