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は正常に機能します:(セッションにアクセスできません)

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

2 に答える 2

1

file_get_contents()認証/セッション情報の送信が必要な場所では使用しないでください。Cookie を送信しないため、ユーザーの認証情報はデフォルトでは含まれません。

URL のクエリ パラメータとしてセッション識別子 (デフォルトでは「PHPSESSID」など) を含め、他のスクリプトでそれをチェックさせることで、ハックすることができます。しかし、URL でセッション ID を送信することは、たとえ同じサーバーに対してであっても、非常に悪い習慣です。

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

これを適切に行うには、CURLを使用して、親ページの Cookie 情報を含む完全な HTTP 要求を作成します。

于 2010-04-13T17:30:52.523 に答える
0

ファイルを含めるか、スクリプトからそれぞれの関数を呼び出す必要がありますsend.sms.php。代わりに、Webサービスのように呼び出します(そうではありません)

于 2010-04-13T07:16:07.407 に答える