【问题标题】:Problem with session_startsession_start 的问题
【发布时间】:2011-06-06 15:18:31
【问题描述】:

我正在尝试主要使用 JavaScript 和 AJAX 进行简单的网络聊天。问题是我使用提示框进行登录,并且该函数在 <body onload="login()"> 中调用,这是一个简单的 JS 函数,但我想保存PHP会话中的数据。问题是每次我重新加载聊天页面时都会得到这个

警告:session_start() [function.session-start]:无法发送 会话 cookie - 标头已发送 由

我想这是标准的东西 - 我在正文中加载了几个函数,即使你把 session_start 函数放在页面的最顶部,也许在它之前加载了一些东西。所以,如果我我是对的,当您使用 JS 和 PHP 会话时存在一些标准问题,有什么办法可以解决它,我尝试以这种方式混合 PHP 和 JS 是否做错了?我正在考虑使用 ob_start,但即使这解决了问题我想找到另一种方法来做到这一点,因为我认为这不是最好的编程实践。无论如何,将感谢有关该主题的任何建议。

<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<LINK href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
function showUser()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// Използваните браузъри
  xmlhttp=new XMLHttpRequest();
  }
else
  {// Кой ли ползва тези версии..
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("ActiveUsers").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","showuser.php",true);
xmlhttp.send();
setTimeout("showUser()",5000);
}
function showChat()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// Използваните браузъри
  xmlhttp=new XMLHttpRequest();
  }
else
  {// Кой ли ползва тези версии..
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("chat").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","showchat.php",true);
xmlhttp.send();
setTimeout("showChat()",1000);
}
function Login()
{
var x=prompt("Please enter your name","");
var xmlhttp;
if (window.XMLHttpRequest)
  {// Използваните браузъри
  xmlhttp=new XMLHttpRequest();
  }
else
  {// Кой ли ползва тези версии..
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
    xmlhttp.open("GET","login.php?u="+x,true);
    xmlhttp.send();
    }
</script>
  <title></title>
</head>

<body onload = "showUser(), showChat(), Login()">
<?php
  If ($_SESSION['UserName']!='alabala'){echo "hi";}
?>
<script type="text/javascript">
function doWork(str)
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// Използваните браузъри
  xmlhttp=new XMLHttpRequest();
  }
else
  {// Кой ли ползва тези версии..
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
    xmlhttp.open("GET","newmsg.php?q="+str,true);
    xmlhttp.send();
}
</script>
<div id="main">
<div id="ActiveUsers"></div>
    <div id="chat"></div>


     <div id="sender">
   Your message: <input type="text" name="msg" size="30" id="msg" />
   <button onclick="doWork(document.getElementById('msg').value);">Send</button>
    </div>
</div>
</body>

</html>

谢谢

勒隆

【问题讨论】:

  • 它与javascript无关。您可能有某种警告或错误被隐藏但首先打印,这会导致 session_start() 问题。请发布您的代码,以便有人可以向您展示实际问题。
  • 您只是省略了消息中有趣的部分。消息说明输出从哪里开始?
  • 输出开始于 C:\Program Files\webPHP\xampp\htdocs\MyChat\chat1.php:1) 在 C:\Program Files\webPHP\xampp\htdocs\MyChat\chat1.php 上第 2 行
  • 我问题中的代码是实际的chat1.php代码。

标签: php javascript ajax


【解决方案1】:

在将任何输出发送到浏览器之前,必须调用 session_start() 函数。这包括任何 HTML 甚至空格,如空行。仔细检查。

JavaScript 问题很可能是一个红鲱鱼。忽略 JavaScript 并直接在浏览器中使用 PHP 页面。你可以让它在没有错误的情况下加载吗?

如果您仍然收到错误 - 请注意 已由错误部分发送的标头 - 这会告诉您输出从哪里开始。它通常是一个脚本和行号。去那里看看当时输出了什么。

【讨论】:

  • 我有一些用于 MySQL 记录的 .php 文件 - 我将用户名和消息放在数据库中,然后从那里调用它们。我在主页中的实际 PHP 代码只是 session_start( ) 函数。
【解决方案2】:

如果您将session_start() 注释掉会怎样?是否有任何错误,或者页面加载是否顺畅?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2020-02-17
    • 2010-12-27
    • 2016-05-07
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多