2012-01-16 4 views
0

自分のサイトにコメントセクションを実装しました。送信ボタンを押した後、ajax aproachによって以下のプロセスが実行されます。AJAX通話中にランダムにPHPセッションが失われたり空になったりする

  1. コメントはデータベースに保存されます。
  2. コメントの詳細を記録したコメントログを更新します(まだDBを使用します)。 (例:John Doeが誰かの投稿にコメントしました。)
  3. コメントセクションをリロードします。新しいコメントが表示されるようになりました。
  4. 完了。

問題は次の2番目の擬似コードを参照してください。

session_start(); 
//1. saves the comment in the database. 

//2. this gets the current user who submitted the comment 
// hence I used the $_SESSION variable 
$log .= "$_SESSION['firstname'] $_SESSION['lastname'] " 
       . 'has commented on someone\'s wishlist.'; 

updateLog($log); // commits the log in the database. 

時には、結果が行く:

ジョン・ドウは、誰かのウィッシュリストにコメントしています。

他の倍の$ _SESSIONは空で、につながる:

が誰かのウィッシュリストにコメントしています。

どこに問題があるのか​​わかりません。しかし、Ajaxの呼び出しでセッションの詳細を渡すことをお勧めしますか? ようなので、(擬似コード):$ _SESSION変数はPHPページでどこでも利用可能であることから、それは市場でのベストプラクティスではないかもしれないので、上記

$.ajax({ 
     url: 'includes/request.php', 
     type: "POST", 
     data: { 
       firstname : $_SESSION['firstname'], 
       lastname : $_SESSION['lastname'], 
       //more details here. 
     success: function(result) { 
      // update the inner html of comment section 
     } 
    }); 

は、私は解決策に疑問を持っています。このシナリオでは、とにかくベストプラクティスは何ですか?

最後に自分のドメイン名は、ネットワーク管理者(下図)によりマスクされる:から

にcomments.com

:coolnamebynetad.com

マスキングが可能でした犯人?私は$ _SESSION変数が何度か働いていて、いくつかのランダムな理由のためにそうではないと思います。

答えて

1

これは、IE(そしておそらくいくつかの他のブラウザ)の問題である - とIEのAJAX経由でクッキーを送信しないので、それがある - 簡単な解決策は、PHPSESSIDという名前のCookieを送信し、その後、こんにちは

+0

特定のIDとのセッションを開始し、手動で@ SergeSまずは、AJAXでセッションを使用する際には、これが最良の方法/練習になるでしょうか? – JohnnyQ

+0

AFAIKはい、私はそれを使用しています... – SergeS

+0

ありがとう@SergeS私はこれが正しい方法ではないと思ったので、私は他のユーザーのセッションのトラックを失っていたことに気づいた。私はまた、それがURLのマスキングの影響を受けたと思います。 – JohnnyQ

関連する問題