2017-09-03 62 views
0

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

//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配置:

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 recieving消息:

<?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分钟后崩溃?

有人可以帮我找出为什么这是,我会更感激。

非常感谢你看这篇文章,即使这意味着很多! (对不起,我的代码超载在这里,我只是想确保我显示你的一切,我可以!)

+0

查看apache日志查看可能的错误信息 – MiSAKACHi

+0

@MiSAKACHi主要问题是我的会话不断被破坏,我认为apache崩溃与其他事情有关,因为它只有一次崩溃! – Galliger

回答

0

根据在PHP文档中的注释,session_start()http://php.net/manual/en/function.session-start.php),可能有必要写到会话数据以便在某些情况下保持会话存活。

我会在session_start()之后加上$_SESSION['time'] = time();试试看看是否有帮助。我不确定是什么导致崩溃,但我会首先检查Apache错误日志。

+0

这会如何帮助会议保持活跃状态​​,请您多给我解释一下,非常感谢! – Galliger

+0

这只是基于评论和您描述的行为的猜测,但评论者推理是文件系统安装参数和mtime被更新而不是atime的问题。通过明确写入每个请求的会话数据,应该更新atime(我猜)。 – jconder