有点奇怪的问题,好的就是我的设置......
AKA长轮询
现在,当没有会话数据时,一切正常(我关闭浏览器并重新启动页面)。但是,一旦我重新加载页面并且它们是会话数据,call.php会执行start_session()并挂起。
我已经尝试了几乎所有的东西而且无法解决这个问题。我试过破坏会话,取消设置所有会话变量,修改一些ini设置,没有任何工作。
这是call.php的代码,其中会话数据是......
session_start();
$sql = ("SELECT userid FROM status WHERE typing = '".mysql_real_escape_string($userid)."'");
$result = mysql_query($sql);
if ($result && mysql_num_rows($result) > 0) {
$row = mysql_fetch_array($result);
$typing_id = $row['userid'];
if (!empty($typing_id)) {
if (isset($_SESSION['typing2'])) {
unset($_SESSION['typing2']);
}
} else {
$typing_id = "-1";
}
} else {
$typing_id = "-1";
if (isset($_SESSION['typing'])) {
unset($_SESSION['typing']);
}
}
if ($_SESSION['typing'] != $typing_id && !isset($_SESSION['typing2']) || $initialize == "1") {
$typing = array('typing_id' => $typing_id);
}
if ($typing_id == "-1") {
$_SESSION['typing2'] = "-1";
} else {
$_SESSION['typing'] = $typing_id;
}
有没有人有任何想法?我当时认为这可能与域名有关,但我不确定。
谢谢!
答案 0 :(得分:7)
我实际上发现(经过数小时和数小时的调试和研究)问题是由于PHP会话锁定引起的。然后,当新页面加载时,它将无法工作,直到旧会话超时。 session_write_close()将修复它。
答案 1 :(得分:1)
默认会话存储是基于cookie的。如果您正在使用它,则必须在php.ini中为会话cookie设置域
http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain