我有一个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 :(得分:0)
由于浏览器将在后续的独立请求中检索图像,因此服务器需要能够识别此新请求中的地图ID。通常不可能在Web场中使用会话,但它需要某种状态服务器/数据库,以便服务器场中的所有服务器共享。
如果您无法在Web场中使用会话,则需要将一些信息传输到新请求中用于标识地图的客户端。独立于您选择的方式,客户端获取一些ID信息。即使您不想使用查询参数,我仍然更喜欢使用查询参数,而不是使用cookie将ID移交给客户端。主要原因是,如果您在页面上有多个地图,它也会起作用。
为了隐藏客户端的真实ID,您可以创建一个人工ID,例如您可以用来检索图像的GUID。您需要存储人工ID,以便您可以识别地图。
您可以限制人工ID,使其仅在一段时间,一些请求或特定用户中有效。这样,客户端只能在非常有限的时间内使用人工id。
当然,这需要一些努力,但在Webfarm中也应该是一种稳定的方式。
答案 1 :(得分:-1)