1

我有一个名为 send.email.php 的页面,它发送一封电子邮件——非常简单的东西——我传递了一个订单 ID,它创建了工作请求并将其发送出去。在我开发的上下文中使用时效果很好(使用 javascript 对 URL 进行 AJAX 调用并将 order_id 作为查询参数传递)

我现在尝试在另一个应用程序中重用完全相同的页面,但是我使用 php file_get_contents($base_url.'admin/send.email.php?order_id='.$order_id) 调用它。当我以这种方式调用页面时,$_SESSION 数组为空 isempty() = 1。

这是因为我正在使用 file_get_contents 启动一个新会话,而我在登录时存储在 $_SESSION 中的值在那里对我不可用?

--> 感谢您的反馈。新呼叫无权访问现有会话是有道理的......

不过新问题:

我现在得到:未能打开流:HTTP 请求失败!尝试执行时:

$opts = array('http' => array('header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"));
$context = stream_context_create($opts);
$contents = file_get_contents($base_url.'admin/send.sms.php?order_id='.order_id, false, $context);

然而,如果我将 URL 称为:(它只是不允许我访问会话),则该 URL 可以正常工作

$result file_get_contents($base_url.'admin/send.sms.php?order_id='.$order_id);
4

2 回答 2

1

file_get_contents()不应在需要传输身份验证/会话信息的任何地方使用。它不会发送任何 cookie,因此默认情况下不会包含用户的身份验证信息。

您可以通过将会话标识符(例如,默认情况下为“PHPSESSID”)作为查询参数包含在 URL 中来绕过它,并让其他脚本检查它。但是在 URL 中传输会话标识符是非常糟糕的做法,即使它只是发送到同一台服务器。

$contents = file_get_contents("http://.... /send_sms.php?order_id=$order_id&" . session_name() . '=' . session_id());

要正确执行此操作,请使用CURL并构建完整的 HTTP 请求,包括父页面的 cookie 信息。

于 2010-04-13T17:30:52.523 回答
0

您必须包含该文件或从send.sms.php脚本中调用相应的函数。相反,您将其称为 Web 服务(它不是)

于 2010-04-13T07:16:07.407 回答