当たり前の質問のように見えることは知っていますが、全部読んでください、私はこれに困惑しています。
私のページの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呼び出しを行うと、セッションが消えます。誰かが問題を見つけることができますか?