6

当たり前の質問のように見えることは知っていますが、全部読んでください、私はこれに困惑しています。

私のページの1つにAJAX呼び出しがあります。これは、動的メッセージングシステムです。

function validateMessage(){

  var recipient = document.getElementById("send_to").value;
  var subject = document.getElementById("popup_subject").value;
  var message = document.getElementById("popup_message").value;

  var parameters="message="+message+"&recipient="+recipient+"&subject="+subject;

   if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
   }
   else
   {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }

   xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("error_mess").innerHTML = xmlhttp.responseText;
    }
  }

  xmlhttp.open("POST","include/send_message.php",false);
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
  xmlhttp.send(parameters);

  }

理由により同期として実装されていますが、ここでは問題ではありません。非同期に切り替えてみましたが、問題は解決していません。

これはsend_message.phpファイルであり、POST変数を取得してデータベースに保存するだけです。

<?php
session_start();
include('db.php');
dbConnect();

$message=$_POST['message'];
$subject=$_POST['subject'];
$recipient=$_POST['recipient'];

$result=mysql_query("select * from korisnici where username='$recipient' ") or die(mysql_error());
$row=mysql_fetch_array($result);
$num=mysql_num_rows($result);

if($recipient=="Poruka za..." || $subject=="Naslov..." || $message=="Poruka" || $recipient=="" || $subject=="" || $message=="")
    echo "<p style='color:red;'>Morate popuniti sva polja.</p>";
elseif($num==0)
    echo "<p style='color:red;'>Korisnik ne postoji.</p>";
else{
    $prima=$row['id_user'];
    $salje=$_SESSION['id_user'];
    mysql_query("insert into poruke (salje, prima, naslov, poruka)
        values ('$salje', '$prima', '$subject', '$message') ") or die(mysql_error());
    echo "<p style='color:green;'>Poruka uspješno poslata!</p>";
}

?>

ただし、$ _ SESSION ['id_user']変数を(送信者として)保存しようとすると、問題が見つかりました。このAJAX呼び出しが実行されるたびに、セッションが破棄されていることがわかりました。したがって、print_r($_SESSION)直後に実行session_start()すると、空の配列が出力されます。

セッションは元のページ自体で有効であり、そのページを更新するとセッションが有効になります。ボタンをクリックしてAJAX呼び出しを行うと、セッションが消えます。誰かが問題を見つけることができますか?

4

2 に答える 2

0

フォームの開始と終了を確認してください。非常に重要なことですが、ボタンをonclickとして指定し、return falseを指定したかどうかを確認してください。指定していない場合は、リダイレクトされ、そこでセッションが行われません。

于 2012-11-22T06:58:59.200 に答える
0

これが私のホスティングプロバイダーのテクニカルサポートチームから私に与えられた解決策です:

/ home / username/public_htmlでsuhosin.session.encrypt=Offを設定します

.htaccessにsuPHP_ConfigPath/home / username/public_htmlを設定します。

そして、それはそれです、今動作します。現時点ではこれらの設定を調査する時間はありませんが、これが同じ状況の誰かに役立つことを願っています。

于 2012-11-22T20:19:58.450 に答える