1

在这里,我将单击按钮时的会话 ID 从一个 asp.net 应用程序传递到另一个 asp.net 应用程序。

应用1:

protected void imgBTN_Click(object sender, EventArgs e)
{
   string sessionKey = HttpContext.Current.Session.SessionID;
   HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"http://localhost:43392/PartnerHome.aspx");
   string svcCredentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(sessionKey));
   req.Headers.Add("Authorization", "Basic " + svcCredentials);
   try
   {
      using (WebResponse svcResponse = (HttpWebResponse)req.GetResponse())
      {
         using (StreamReader sr = new StreamReader(svcResponse.GetResponseStream()))
         {
            string jsonTxt = sr.ReadToEnd();
         }
      }
   }
   catch (Exception c)
   {
   }
}

我的问题是如何在我的第二个 asp.net 应用程序页面加载中检索此会话 ID

应用 2:

protected void Page_Load(object sender, EventArgs e)
{
}

有什么建议吗?

4

1 回答 1

0

另一种解决方案:

我要做的是在应用程序 1 的页面上添加一个不可见的图像(一些透明像素):

<img src="http://site2.domain.com/transpimage.aspx">

不可见图像实际上是站点 2 托管的 asp.net 页面。
在 transpimage.aspx 的页面加载事件中。我会输出一些图像:

public void Page_Load(...)
{
     using(Bitmap image = new Bitmap(1,1))
     using(MemoryStream stream = new MemoryStream())
     {
          image.Save(stream);
          Response.ContentType = "image/png";
          stream.WriteTo(Response.OutputStream);
          Response.End();
     }
}

由于来自应用程序 2 的图像由 aspx 页面(不是文件中的静态图像)提供,因此它将保持应用程序 2 的会话处于活动状态。我以前做过这个,它往往相当健壮。

如果您熟悉 HttpHandlers,则可以将“图像页面”编写为处理程序,但不要忘记,如果您将其作为处理程序进行,则需要从 IRequiresSessionState 接口继承才能实际访问会话。

希望这可以帮助!

于 2013-01-11T08:48:53.653 回答