コードからの標準的なhttp要求とhtml形式の送信要求との間に違いがあるのでしょうか。もちろん、ユーザーエージェントなどの明白なことはありません。コードのHTTP要求とWebブラウザの違い
ページにリクエストを送信したい場合、ページでセッション変数が作成されます。現在、私はHTTPリクエストを生成しているPHPスクリプトを持っています(私はcurlを試しました& file_get_contentsをstream_context_createを使って)ページに戻し、応答を取り戻しました。この同じPHPページには、全く同じリクエストを生成するためにajaxを使用するいくつかのjavascriptもあります。
PHPがJSなしでリクエストを作成すると、セッションが作成されてレスポンスに返されますが、新しいページにアクセスするとセッションは終了します。私がAjaxを単独で使用すると、要求はセッションデータを返し、他のページにアクセスするとセッションはまだ存在します。注:私はまた、HTMLフォームを使用してURLに投稿しようとしましたが、これもセッションを有効に保ちます。
なぜこれが起こっているのか理解できません。私の唯一の考えは、phpリクエストとajaxリクエストのデフォルト値の間にいくつかの相違があるためです。
リクエストページコンテンツ
session_start();
$_SESSION['message'] = "Works";
var_dump($_SESSION);
PHPスクリプトの内容
<?php
session_start();
var_dump($_SESSION);
error_reporting(E_ALL|E_STRICT);
$username = "test";
$password = "test";
$url = "https://website.com/test.php";
$postinfo = "username=".$username."&password=".$password;
// $ch = curl_init($url);
// curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
// $result = curl_exec($ch);
// curl_close($ch);
$data = array('username' => $username, 'password' => $password);
$options = array(
'http' => array(
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);
?>
<?php echo time();?>
<form action="<?php echo $url;?>" method="post">
<input type="text" name="username"><br>
<input type="text" name="password"><br>
<input type="submit" value="submit">
</form>
<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
<script>
$(document).ready(function() {
$.ajax({
type: "POST",
url: "<?php echo $url;?>",
data: { username: '<?php echo $username;?>', password: '<?php echo $password;?>' },
success: function (content) {
alert(content);
console.log("Request Response = " + content);
},
fail: function (message) {
alert("Failure - " + message);
editmemberform.dialog('close');
}
});
});
</script>
私はスクリプトを実行すると、私はPHPのリクエストから取得応答はこれが示唆私に
string(49) "array(1) { ["message"]=> string(5) "Works" } "
ですセッションデータがダンプアウトされるときにセッションが作成されたことを示します。 ajaxリクエストはリクエストを行い、レスポンスはまったく同じです。これがコンソールに書き込まれます。
Request Response = array(1) {
["message"]=>
string(5) "Works"
}
2つの同一のリクエストがこのように動作する理由を理解できません。私はまた、ASP.NETスクリプトからポスト要求を実行しようとし、同じ問題を抱えています。ブラウザが生成するリクエストとコードリクエストのリクエストについては、何か異なるものがなければなりません。
注:httpとhttpsを使用してこれを試しました。私は決して何の誤りもありません。応答は常に正しいです。私は新しいページを訪問したときにPHPがJSせずに要求を作成すると
PHPスクリプトはPHP 5.4
主な違いはブラウザが内部的に管理するセッションクッキーですが、あなたはcURLで自分自身を管理する必要があります – charlietfl
あなたはセッションクッキーを保存していないので、毎回あなたのスクリプトが新しい/異なるセッションになるようにリクエストします。 –
私はどのようにデフォルトセッションクッキーを定義しますか?ログインセッションデータを作成して、一度に複数のサイトにログインできるようにしたい。コードリクエストでは、標準のブラウザベースのセッション内でセッションを作成する必要がありますが、これは可能ですか? –