如何将数据发送到Web-Farm中除查询字符串之外的其他页面

时间:2015-11-20 06:21:31

标签: c# html asp.net web-farm

我有一个webFarm应用程序和一个HTML图像控件,如下所示

<img id="logo" runat="server" src="" width="200" height="300" />

我从后面的代码设置此图像的scr,如下所示 -

string mapId = "1234"; // mapId can vary
logo.Src = "./logo.aspx?mapId=" + mapId ;

这里logo.aspx是一个简单的aspx页面,其中包含以下Page_load代码 -

logo.aspx

 protected void Page_Load(object sender, EventArgs e)
 {
     Response.Clear();
     Response.ContentType = "image/jpeg"; 

     int mapIdValue= int.Parse(Request.Params["mapId"]); // mapId from querystring

     string data = someFunction(mapIdValue); // to get image in Base64 String format
     Response.BinaryWrite(Convert.FromBase64String(data));  
     Response.End();    
 }

这很好用。

我的问题是,我不想在查询字符串中发送mapId,因为它向用户公开。那么将mapId从我的页面发送到logo.aspx的可行方法是什么呢 我不能使用session或HttpContext Items Collection,因为它是一个Webfarm。

我尝试使用previousPage,但没有为我工作..

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:0)

由于浏览器将在后续的独立请求中检索图像,因此服务器需要能够识别此新请求中的地图ID。通常不可能在Web场中使用会话,但它需要某种状态服务器/数据库,以便服务器场中的所有服务器共享。

如果您无法在Web场中使用会话,则需要将一些信息传输到新请求中用于标识地图的客户端。独立于您选择的方式,客户端获取一些ID信息。即使您不想使用查询参数,我仍然更喜欢使用查询参数,而不是使用cookie将ID移交给客户端。主要原因是,如果您在页面上有多个地图,它也会起作用。

为了隐藏客户端的真实ID,您可以创建一个人工ID,例如您可以用来检索图像的GUID。您需要存储人工ID,以便您可以识别地图。

您可以限制人工ID,使其仅在一段时间,一些请求或特定用户中有效。这样,客户端只能在非常有限的时间内使用人工id。

当然,这需要一些努力,但在Webfarm中也应该是一种稳定的方式。

答案 1 :(得分:-1)