隐藏QueryString MVC3 -ASP.NET

时间:2011-06-20 13:46:42

标签: c# asp.net-mvc-3

我在RouteData中存储Vaues,如下所示。

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

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

从RouteData获取值

这很好,但这些值在URL中可见。我不希望在URL中看到这些值。

我怎么能这样做?

以前是否有人这样做过?

2 个答案:

答案 0 :(得分:3)

您可以将加密存储在URL中; 只需加密每个Querystring参数。这样做的好处是,您的用户可以使用参数为页面添加书签(除非这不是您想要的;然后您可以为加密值添加到期时间,以便您可以检测URL是否已过期)。

选项#2是将您的值存储在客户端上的加密的非持久性Cookie 中,以便将其从网页浏览持久保存到网页浏览。您希望它们被加密,以便无法从浏览器的内存中读取它们,并且您希望它们是非持久性的,以便它们不会保存到文件中。用户无法为网址添加书签。

选项#3的可扩展性最低,即在ASP.NET服务器或状态服务器上将其存储在会话状态。服务器不应该易受攻击,因此不必在此处使用加密。但是如果你的服务器很慢和/或你有很多访问者,这可能会降低机器的速度。同样,访问者无法为URL添加书签,因为参数不会存储在那里。

选项#4是在URL中存储哈希键,并将与该哈希键相关的实际数据存储在内存或数据库中。同样,你必须看看这是否适用于你的情况。用户可能也可能无法为URL添加书签,这是您的选择 - 如果可以,那么您需要保留(哈希键,值)对的永久记录。

答案 1 :(得分:2)

如果这是敏感数据,则有几种可能性:

  • 将其存储在服务器上的会话中。
  • 将其存储在客户端的加密cookie中。如果使用表单身份验证,则可以使用FormsAuthentication票证的userData部分。这样它将沿每个请求发送。但如果真的非常敏感,将数据存储在服务器上会更好。然后使用经过身份验证的用户名,以便在将数据存储在服务器上的任何位置检索此数据。

如果它不敏感,您可以使用POST而不是GET,以便典型的用户不会在URL中看到它。