PHP urlencode() 加上 ?SID=xxx ...为什么?
我正在尝试输出一个简单的链接。
效果很好:
$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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不要使用 urlencode() 来编码 URL,你最终会得到这样的 URL,
对于 PHP 来说,这看起来像一个相对 URL,因此当 cookie 丢失时它会附加 SID。
urlencode() 应用于对查询字符串参数进行编码,而不是对 URL 本身进行编码。
Don't use urlencode() to encode URL, you will end up an URL like this,
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.
这不是 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.