PHP urlencode() 加上 ?SID=xxx ...为什么?

发布于 2024-08-31 04:08:58 字数 290 浏览 1 评论 0原文

我正在尝试输出一个简单的链接。

效果很好:

$url = 'http://www.google.com';
echo $url;

效果不太好:

$url = 'http://www.google.com';
echo urlencode($url);

第二个示例出于某种原因在 URL 末尾添加了“?SID=xxx”。我该如何防止这种情况发生?

注意:为了保护无辜者,生成 URL 的代码已被更改。

I am trying to output a simple link.

This works great:

$url = 'http://www.google.com';
echo $url;

This doesn't work great:

$url = 'http://www.google.com';
echo urlencode($url);

The second example tacks on "?SID=xxx" to the end of the URL for some reason. How do I prevent this from happening?

Note: The code to generate the URL has been changed to protect the innocent.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

走走停停 2024-09-07 04:08:58

不要使用 urlencode() 来编码 URL,你最终会得到这样的 URL,

http%3A%2F%2Fwww.google.com

对于 PHP 来说,这看起来像一个相对 URL,因此当 cookie 丢失时它会附加 SID。

urlencode() 应用于对查询字符串参数进行编码,而不是对 URL 本身进行编码。

Don't use urlencode() to encode URL, you will end up an URL like this,

http%3A%2F%2Fwww.google.com

To PHP, this looks like a relative URL so it appends SID when cookie is missing.

urlencode() should be used to encode query string parameters but not the URL itself.

凉风有信 2024-09-07 04:08:58

这不是 urlencode() 的错,而是 PHP 的自动链接重写在没有会话 cookie 的情况下通过 GET 变量添加会话 ID。

恐怕如果客户端禁用了 cookie,则有必要在客户端保留会话。

自动执行此操作的设置是 session.use_trans_sid。更多信息此处

This is not urlencode()s fault, it's PHP's automatic link rewriting that adds the session ID through a GET variable in absence of a session cookie.

I'm afraid this is necessary to persist sessions on the client side if they have cookies disabled.

The setting to do this automatically is session.use_trans_sid. More info here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文