jov*_*van 6 javascript php ajax session
我知道它看起来像一个平庸的问题,但请阅读整个事情,我很难过.
我的一个页面上有一个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);
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它被实现为同步,这不是问题所在.我尝试切换到异步,问题仍然存在.
这是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>";
}
?>
Run Code Online (Sandbox Code Playgroud)
但是,当我试图保存$ _SESSION ['id_user']变量(作为发送者)时,我发现了一个问题 - 事实证明每次运行这个AJAX时会话都被销毁了!所以print_r($_SESSION)在session_start()打印出一个空数组后立即执行.
会话在原始页面本身上处于活动状态,刷新该页面可使会话保持活动状态.只有当我单击按钮进行AJAX调用时,会话才会消失.有人能发现问题吗?
这是我的托管提供商的技术支持团队给我的解决方案:
在 /home/username/public_html 中设置 suhosin.session.encrypt=Off
在 .htaccess 中设置 suPHP_ConfigPath /home/username/public_html。
就是这样,现在可以了。目前没有时间调查这些设置,但我希望这会对处于相同情况的人有所帮助。
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |