C# 如何将数据发送到Web场中除查询字符串以外的其他页面

C# 如何将数据发送到Web场中除查询字符串以外的其他页面,c#,html,asp.net,web-farm,C#,Html,Asp.net,Web Farm,我有一个webFarm应用程序和一个HTML图像控件,如下所示 <img id="logo" runat="server" src="" width="200" height="300" /> 这里logo.aspx是简单的aspx页面,带有以下页面加载代码- logo.aspx protected void Page_Load(object sender, EventArgs e) { Response.Clear(); Response.ContentT

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

<img id="logo" runat="server" src="" width="200" height="300" />
这里logo.aspx是简单的aspx页面,带有以下页面加载代码-

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项目集合,因为它是一个Web场。

我尝试使用上一页的
,但不适用于我


对此有何想法?

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

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

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

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


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

它可能是有用的。请参考下面的链接

如何使用上一页提交时的Post发送数据。通过querystring发送MapId,但在发送之前,请以这种方式对MapId进行加密,即使它向用户公开,也不会使他们受益,因此此处维护了安全性。稍后在logo页面中解密if并继续执行任务。在安全性方面,GET和POST请求没有什么不同,只是查看POST参数wireshark或fiddler是必需的。您应该使用状态服务器进行会话管理,或者使用DB方法创建guid(映射Id令牌)并发送此令牌,而不是在web场中使用会话时出现问题的MAPIDHATS?为什么不创建一个具有属性映射Id的用户控件来设置并在加载时呈现图像…在需要时使用该用户控件
 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();    
 }