【问题标题】:Why use of session name and session id in the get variables does not work?为什么在获取变量中使用会话名称和会话 ID 不起作用?
【发布时间】:2012-06-23 14:42:26
【问题描述】:

我有以下代码:

$location .= 'red=no&'.session_name() . "=". session_id();
$content = file_get_contents($location);
echo $content;

如果我运行它,我的浏览器中会显示注释。但是,如果我按以下方式修改它:

$location .= 'red=no';
$content = file_get_contents($location);
echo $content;

一切正常(我在浏览器中看到了内容)。

还有什么奇怪的,如果我显示第一个示例 (url) 中的 $location 变量的值并手动将其粘贴到浏览器的地址行中,我确实看到了内容。所以,我的浏览器可以使用这个 URL 而file_get_contents 不能。

有人知道怎么解释吗?

【问题讨论】:

  • echo session_name();echo session_id(); 打印出什么?您是否在某处使用session_start(); 实例化会话?
  • 会话名称:随便,会话ID:c8ec2afe8bb7388175f2065f1cb0c868
  • 是的,一开始我有session_start

标签: php session get file-get-contents


【解决方案1】:

这没有意义。如果文件是远程的,并且 $location 是一个 url,那么我认为正在发生的事情是远程服务器没有通过 $_GET 获取会话 ID(或者当您的服务器发出请求时它拒绝服务器提供的会话 ID ,或类似的东西)。

如果文件是本地文件,那么问题在于您显然有一个名为 red=no&whatever=c8ec2afe8bb7388175f2065f1cb0c868 的文件。实际上,在这种情况下,我怀疑该文件可能被命名为 red=no。如果不是,则&符号正在扔掉东西。逃脱它,你就没事了。

或者不要使用这种可怕的文件名。

【讨论】:

  • 我给出的代码位于en.example.org/index.php。从我给你的代码中,你只能看到 $location 的一部分。位置的值为:example.org/index.php?red=no&whatever=c8ec...。您说服务器可能不接受通过 get 变量的会话,但是为什么当我将位置放在地址行时它会起作用?
  • 清除浏览器的 cookie 是否有效?还是更好地在另一个浏览器中发出请求?
  • 您正在做的事情(要求一个 http 客户端使用提供给另一个 http 客户端的会话发出请求)称为会话欺骗。 example.org 不会让这个工作。
猜你喜欢
  • 2012-02-02
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 2013-10-13
相关资源
最近更新 更多