2015-11-20 35 views
1

我有一个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但不是为我工作..

在这个任何想法?

+0

如何使用上一页上提交的邮政发送数据。 –

+1

通过查询字符串发送MapId,但是在发送之前以这种方式加密mapid,即使它暴露给用户也不会使他们受益,因此安全性在此处保持不变。稍后在徽标页面解密,如果并继续您的任务。 – Prabhat

+0

在安全性方面,GET和POST请求没有什么不同,除了查看后需要参数wireshark或fiddler之外。您应该使用状态服务器进行会话管理,或者使用数据库方法创建一个GUID(地图Id令牌)并发送该令牌而不是mapId –

回答

0

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

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

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

您可以限制伪造ID,以便它仅在一段时间内有效,有多个请求或针对特定用户有效。这样,客户端只能在非常有限的时间内使用人工ID。

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

相关问题