2012-02-24 85 views
2

我想隐藏来自URL的参数。我使用的是uuids而不是ID,当我在URL中传递它时,它看起来有点长和难看。首先想到的是使用带有隐藏输入的小表单而不是锚点,但将每一个锚点替换为形式将会很不舒服,而且当锚点已经以另一种形式放置时,它也不起作用。通过将GET参数重写为POST并重定向一个好主意来隐藏GET参数?

因此,第二个想法是将$_GET重写为$_POST/$_SESSION,然后再次重定向到此脚本。所有变量都将可用,并且URL将变得干净而简短。

但是,这种解决方案的性能呢?这样做是个好主意吗?

任何帮助或其他想法将不胜感激。提前致谢。

PS。

+1

如果你只是关心url的“美”,把你的应用程序放在一个框架中。这也有助于防止用户使用GET参数为URL添加书签 – 2012-02-24 08:27:43

+0

UID在表单中很好,但是您希望将它们从页面传递到页面吗?如果是这样,他们需要进入超链接,所以你需要不时地把它们放入GET字符串中 - 除非你使用类似回传(imo是笨重的)。你能把这个东西放在会话中吗? (当我们不知道它是什么或它是什么时,很难知道该建议做什么)。 – halfer 2012-02-24 08:29:25

+1

@Eugen请不要将时间归还给Web 0.8。帧是反模式。理解HTTP并明智地使用它,不要试图解决它。 – deceze 2012-02-24 08:29:51

回答

3

不要更改GET POST或反之亦然漂亮。在许多情况下,这两种HTTP方法的处理方式都非常不同,并且您不希望导致这些副作用。

POST请求不能自包含在URL中,即尝试将某个链接发送给需要POST请求的站点。 POST请求使用浏览器历史记录,即尝试点击返回按钮返回通过POST提交的页面。 POST请求不会被搜索引擎索引。

POST请求应该用于修改服务器上的数据。不要将它们用于所有常规请求。

如果您需要更漂亮的网址,请查找其他方式来引用您的记录。或者只是停止关心它,这真的不是重要。

+0

这听起来很合理,特别是因为我会向用户发送带有URL的邮件。我的解决方案也回到按钮问题听起来不好。我认为这是最好的回答:) – zelazowy 2012-02-24 08:37:45

0

如果你采用这种策略,你当然会在整个网站的宽度上释放所有搜索引擎的好处。当您提交需要保存到存储介质(或发送安全数据https等的数据)的数据时,您应该只使用,否则对于“请求”数据的建议是$_GET。因此,您需要在这里确定用例并遵循该模式。

我了解您对'丑陋'网址的评论,但会建议您在寻找补救措施时谨慎行事。一种方法当然是在传入的参数上做一个urlrewrite,但是这需要数据库查找等等(以获得映射的漂亮的url字符串),因此可能是昂贵的。

我会在发生任何其他想法时回来。

+0

搜索引擎并不那么重要,但你和@deceze是对的,让GET做它的工作并发布它。 – zelazowy 2012-02-24 08:39:37