2015-11-20 40 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中也應該是一種穩定的方式。

相關問題