2011-06-20 222 views
1

我在RouteData中存儲Vaues,如下所示。隱藏查詢字符串MVC3 -ASP.NET

new RouteValueDictionary(new { Controller = "Absence", Action = "AmendAbsence", Id = PersonGuidSelected })

我使用以下RouteData.Values["id"].ToString()

這是好讓價值形態的RouteData,但值是在URL中可見。我不希望在URL中看到這些值。

我該怎麼做?

以前是否有人這樣做過?

回答

2

如果這是敏感的數據有幾個可能的原因:在服務器上的會話

  • 存儲。
  • 將其存儲在客戶端的加密cookie中。如果您使用表單身份驗證,則可以使用FormsAuthentication憑單的userData部分。這樣它就會按照每個請求發送。但是,如果它真的非常敏感,那麼將其存儲在服務器上的數據會更好。然後使用經過身份驗證的用戶名將其存儲在服務器上的任何位置檢索此數據。

如果不敏感,你可以使用POST而不是GET,使得典型用戶不會看到它的URL。

3

您可以將其存儲在URL中加密的;只需加密每個Querystring參數。這樣做的好處是您的用戶可以使用參數爲頁面添加書籤(除非這不是您想要的;然後您可以將過期時間添加到您的加密值中,以便您可以檢測URL是否已過期)。

選項2將存儲您的值,如果您需要將它們從綜合瀏覽量保存到綜合瀏覽量,請在客戶端上加密非持久性Cookie。你希望它們被加密以便它們不能從瀏覽器的內存中讀取,並且你希望它們是非持久性的,這樣它們就不會被保存到文件中。用戶無法爲URL添加書籤。

選項#3是可伸縮性最低的,也就是將其存儲在ASP.NET服務器或狀態服務器上的會話狀態中。任何一個服務器都不應該容易受到攻擊,因此在這裏不需要使用加密。但是如果你的服務器速度很慢,或者你有很多訪問者,這可能會減慢機器速度。同樣,訪問者也無法爲URL添加書籤,因爲參數不存儲在那裏。

選項#4是在URL中存儲散列密鑰,並將與該散列密鑰相關的實際數據存儲在內存或數據庫中。再次,你必須看看這是否適合你的情況。用戶可以或不可以爲URL添加書籤,這是您的選擇 - 如果可以的話,那麼您需要保留(哈希鍵,值)對的永久記錄。