我正在开发一个具有数据库后端的Web应用程序。在过去,我做过以下的事情: http://page.com/view.aspx?userid=123查看用户123的个人资料;使用查询字符串。
使用查询字符串是否被视为良好做法?还有其他我应该做的事吗?
我正在使用C#4.0和ASP.net。
答案 0 :(得分:6)
你的问题不是一个真正的.NET问题......每个网络框架和网络开发者都会以某种方式处理这个问题。
大多数人都同意,对于网站的主要用户部分,您应该避免使用长的查询字符串,而选择对网站访问者“有意义”的网址结构。尝试使用逻辑层次结构,当访问者阅读它时,他们很有可能推断出他们在网站上的位置。点击几个区域的StackOverflow,看看他们用url做了什么。你通常很清楚你在看什么以及你在哪里。
其他几个问题......尽管使用主键进行了大量数据库查找,但在网址中提供用户友好的资源名称也是一个好主意,而不仅仅是主键。您可以看到StackOverflow在当前地址执行此操作,他们使用主键“3544483”进行查找,但也包括SEO /用户友好的URL参数“is-querystrings-in-net-good-practice”。如果有人通过电子邮件向您发送了该链接,那么您就可以很好地了解自己即将开放的内容。
我不确定WebForms如何处理Url Routing,但如果您正在努力掌握这些概念,请参阅MVC NerdDinner教程。它们涵盖了一些可能有用的基本网址路由。
答案 1 :(得分:3)
查询字符串是完全正常的。您应该检查有效值(数字,而不是空等等)以及您的应用程序是否具有安全性,是否访问者有权查看用户1245的个人资料..
你可以看看Session& ViewState,但是QueryString似乎就是你所追求的。
答案 2 :(得分:1)
如果可能的话,我认为应该避免这种做法,特别是如果你以纯文本传递自动递增的ID。在我看来,你几乎戏弄用户操纵查询字符串值,看看他们是否可以访问别人的个人资料。即使采用了适当的安全措施(在呈现页面之前验证服务器端的请求),我仍然建议在这种特殊情况下加密查询字符串参数。
答案 3 :(得分:0)
我认为使用查询字符串是完全正常的,但是hackable URLs有一个案例,因为它们对于高级用户来说更容易理解,并且对SEO很友好。例如,我认为http://www.example.com/user/view/1234
看起来比http://www.example.com/view.aspx?user=1234
更直观。
如果您使用的是IIS 7.0,则无需更改应用程序以使用漂亮的URL。 URL Rewrite Module和一些重写规则就足够了。
答案 4 :(得分:0)
要清楚地回答你的问题:是的,这不是一个好的实践。事实上,这是网站的预期行为。
我完全同意ShaderOp,你应该使用url rewritter来获得一个漂亮的loocking url。事实上,我假设您将进行一些验证,以避免有人操纵网址并访问他们不应该保存的数据。
答案 5 :(得分:0)
查询字符串没问题,但不会危及它们的安全性。
如果您要访问的配置文件是当前登录的用户,则无需发送uid。只需转到/ profile并加载当前登录的用户信息。
如果您正在查看其他会员资料,我建议您使用“用户名”,加密ID或Guid。
将用户ID暴露给客户通常不是一个好主意。