为什么我的PHP会话不断结束,Apache偶尔会崩溃?

时间:2017-09-03 14:23:31

标签: javascript php jquery ajax apache

我的JavaScript:

//Function that gets the chat from backend
function showmessage(str) {
    if (str == "") {
        return;
    } else { 
        if (window.XMLHttpRequest) {

            xmlhttp = new XMLHttpRequest();
        } else {

            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("chat").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","/backend-display.php?q="+str,true);
        xmlhttp.send();
    }
}

//Show any messages that will pop-up
setInterval('showmessage()',400);


//Function that updates new rows
function newrows(str) {
    if (str == "") {
        return;
    } else { 
        if (window.XMLHttpRequest) {

            xmlhttp = new XMLHttpRequest();
        } else {

            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("test").innerHTML = this.responseText;
                var elem = document.getElementById('chat');
                elem.scrollTop = elem.scrollHeight;
            }
        };
        xmlhttp.open("GET","/test2.php?success=true"+str,true);
        xmlhttp.send();
    }
}

//Updates new rows every x seconds
setInterval('newrows()',300);


//Backend to send a message
function loadDoc() {
  var xhttp = new XMLHttpRequest();

    var mes = document.getElementById("message").value;
    var message = "message=" +mes;

  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("input").innerHTML = this.responseText;
    }
  };
  xhttp.open("POST", "/backend-input.php", true);
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhttp.send(message);
  document.forms["form"].reset();
}

PHP.ini config:

Php.ini config link

后端输入:

<?php include 'auth.php';?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>

<?php
$name = $_SESSION["name"];
$messageunfilter = $_POST["message"];

$con = mysqli_connect('localhost','root','','chat');
if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
}


if(empty($_POST["message"])){
           echo "You must enter a message...";
           exit();
      }else{
           echo "success";
      }


//Checking SQL    
$check = array("\\", "'");
$change   = array("\\\\", "''");

$messagefilter = str_replace($check, $change, $messageunfilter);

date_default_timezone_set('Europe/London');
$current_date = date("Y-m-d H:i:s");

mysqli_select_db($con,"ajax_demo");
$sql="INSERT INTO `chat` (`id`, `username`, `message`, `date`) VALUES (NULL, '$name', '$messagefilter', '$current_date')";
$result = mysqli_query($con,$sql);

mysqli_close($con);
?>
</body>
</html>

后端接收来自DB的消息:

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<head>
<link href="style.css" rel="stylesheet">
</head>
<?php //Selects all of the logged in users messages.
$name = $_SESSION["name"];

$con = mysqli_connect('localhost','root','','chat');
if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM `chat` ORDER BY date";
$result = mysqli_query($con,$sql);
$numrows = mysqli_num_rows($result);

if( $numrows == "0" or !isset($_SESSION["name"])){
            echo "<div class='msg'>";
           echo "<div class='username_admin'>System</div>";
           echo "<div class='msg_admin'>There are no messages to display...</div>";
            echo "</div>";
           exit();
      }else{
           echo "";
      }


echo "<div class='msg_container'>";
while($row = mysqli_fetch_array($result)) {
    $class_msg = "msg";
    $class_username = "username";
    $class_message = "message";

    if ($row['username'] == $_SESSION['name']) {
    $class_msg = "msg_user";
    $class_username = "username_user";
    $class_message = "message_user";
    }

    echo "<div class='$class_msg'>";
    echo "<div class='$class_username'><span>" . $row['username'] . "</span></div>";
    echo "<div class='$class_message'><span>" . $row['message'] . "</span></div>";
    echo "</div>";
    }
echo "</div>";
mysqli_close($con);
?>
</body>
</html>

我知道websockets,我的代码需要清理很多,以及我的陈述没有准备好。

由于某种原因,在这个系统运行5分钟左右后,会话似乎被破坏了?

我不知道为什么会这样?是因为我要求它太多次了吗?

即使我只有2个用户连接相互通信,它仍然会崩溃,它会在60秒,1分钟后崩溃吗?

有人可以帮我弄清楚为什么会这样,我会非常感激。

非常感谢你看这篇文章,即使这意味着很多! (对不起,这里的代码过载,我只是想确保我向你展示我能做的一切!)

1 个答案:

答案 0 :(得分:0)

根据session_start()http://php.net/manual/en/function.session-start.php)的php文档中的评论,可能需要写入会话数据,以便在某些情况下保持会话处于活动状态。

我会在$_SESSION['time'] = time();尝试之后添加session_start(),看看是否有帮助。我不确定导致崩溃的原因,但我会先检查apache错误日志。