これは取引ですJQuery/AJAX経由でドメイン間を渡した後、変数をPHPセッションに保存するにはどうすればよいですか?
私は2つのドメインを持っています。ドメイン1は、ログインセッションでメインWebサイトをホストし、ドメイン2はチャットをホストします。
これまでのところ、ドメイン1にログインすると、チャットリンクが表示されます。 ドメイン1のリンクをクリックすると、ドメイン2に行く前にいくつかのことが起こります。ドメイン1は、AJAXポストを介してドメイン2のpass.phpに必要な情報を渡します。 ドメイン2はこれらの変数を受け取り、セッションに保存し、ドメイン1にメッセージ「ok」を返します。 ドメイン1が「ok」と等しいメッセージを受信すると、セッションが保存され、ドメイン2に移動したことを意味します。チャットが読み込めないというメッセージが表示されます。
ドメイン間でデータ交換が行われており、ドメイン2が「ok」メッセージを返しますが、「index.php」というページが読み込まれてセッションが開始されると、保存されたセッション変数は空になります。変数がAJAX転送の直後にもう一方の端で消去されたかのように。私はそのページに行くとセッション変数に保存されたものを保持したいので、ドメイン2のドメイン1から渡されたセッション変数を使用することができます。ここ
はドメイン1からのコードです:ここでは
<ul class="dropdown-menu">
<li style="text-align:center;"><a href="member.php">Edit Profile</a></li>
<li style="text-align:center;"><a href="profile.php?user=<?php echo $username; ?>">View Profile</a></li>
<li style="text-align:center;"><a href="inbox.php?page=1">Messages</a></li>
<li style="text-align:center;"><a class="loadlink" id="chatclick" href="#">Chat</a></li>
</ul>
<script type="text/javascript">var name = "<?= $username ?>";</script>
<script type="text/javascript">var id = "<?= $userid ?>";</script>
<script src="/js/menuscript.js"></script>
はmenuscriptファイルのクライアント側のドメイン1:
$(document).ready(function()
{
"use strict";
$('.loadlink').click(function(e){
e.preventDefault();
var lnk = 'http://52.39.48.172/index.php?test=test';
$.ajax({
url:"http://52.39.48.172/bin/pass.php",
data:"name="+name+"&id="+id,
type:"POST",
dataType:"json",
contentType:"application/json; charset=utf-8",
success:function(data)
{
if(data.callback == "ok")
{
window.location.href = lnk;
}
else
{
alert("ERROR: could not connect to chat");
}
}
});
});
});
これは、ドメイン2
上pass.phpのコードです<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
error_reporting(E_ALL^E_NOTICE);
session_start();
if(isset($HTTP_RAW_POST_DATA)) {
parse_str($HTTP_RAW_POST_DATA,$arr);
$_SESSION["username"] = $arr['name'];
$_SESSION["userid"] = $arr['id'];
$arr2['callback']= "ok";
echo json_encode($arr2);
}
else
{
$arr2['callback']= "nogo";
echo json_encode($arr2);
}
?>
最後に:これはドメイン2のindex.phpです
ドメイン変数1をドメイン2に切り替えると、セッション変数が設定されていないため、以前のCORS通信からのものでなければならないため、インデックスphpの "die(" dead ")"関数がヒットします。代わりに、セッション変数は空のままです。起こることを意味いただきまし は、「テキストエリア」に表示され、誰もが私が間違っているのかを説明してくださいすることができ、ドメイン2.
上 index.phpをロードし、私はそれを修正する方法をするために、新たに保存された変数のためにあるのですか?
[ '名前']と$ ARR [ 'idは']持っているARR $をいドメイン2の値pass.php。配列のこれらの2つの値が空である可能性があります。彼らは –
です。私はそれをテストしました。彼らは値を読み取り、正確な値を返します。値がpass.phpに割り当てられていない場合、そのエラーメッセージに到達することを意味します。 問題は、pass.phpで設定されたセッション変数がインデックスに達すると消去されることです。php – emjay