2016-07-22 2 views
0

これは取引です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をロードし、私はそれを修正する方法をするために、新たに保存された変数のためにあるのですか?

+0

[ '名前']と$ ARR [ 'idは']持っているARR $をいドメイン2の値pass.php。配列のこれらの2つの値が空である可能性があります。彼らは –

+0

です。私はそれをテストしました。彼らは値を読み取り、正確な値を返します。値がpass.phpに割り当てられていない場合、そのエラーメッセージに到達することを意味します。 問題は、pass.phpで設定されたセッション変数がインデックスに達すると消去されることです。php – emjay

答えて

0

私は、セッションがpass.phpで開始され、index.phpのセッションは2つの異なるセッションであると信じています。私は今それを試す方法がないので、私は確信することはできませんが、私は可能な解決策を与えて、それがあなたのために働くかどうかを試して、報告してください。 :)

pass.php

//... 
if(isset($HTTP_RAW_POST_DATA)) { 
    parse_str($HTTP_RAW_POST_DATA,$arr); 



    $_SESSION["username"] = $arr['name']; 
    $_SESSION["userid"] = $arr['id']; 

    $arr2['callback']= "ok"; 
    $arr2['sessid'] = session_id(); 

    echo json_encode($arr2); 
} 
//... 

アヤックス

$.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+"?sessid="+data.sessid; 
     } 
     else 
     { 
      alert("ERROR: could not connect to chat"); 
     } 
    } 

    }); 
}); 

のindex.php

session_id($_GET['sessid']); 
session_start(); 
+0

いいえ、同じ結論です。途中で時間を割いてくれてありがとう。 私はまだそれを理解できないようです。 pass.phpがクッキーを設定するクッキーを使ってみました。しかし、それはindex.phpがクッキーを読むことができないかのいずれかで動作しません。 – emjay

+0

また、die( "die")の前にエコーsession_id()が返ってくるものを見ました。 しかし、それは何も返しません...もしそれが助けたら – emjay

+0

ha!待つ!その解決! 私はすでに前に自分のリンクの最後に?test =テストをしました。あなたのコードへの変更は別のものを入れますか?それの前に ?テスト=テストを取り除き、それは動作します! いいですね! – emjay

関連する問題