2011-06-20 307 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添加书签,这是您的选择 - 如果可以的话,那么您需要保留(哈希键,值)对的永久记录。