PHP Session_start正在挂起

时间:2010-02-24 04:49:10

标签: php session

有点奇怪的问题,好的就是我的设置......

  1. domain.com从sub.domain.com上的iframe调用读取
  2. sub.domain.com对sub.domain.com/call.php
  3. 进行ajax调用
  4. sub.domain.com返回对domain.com的ajax调用
  5. 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;
            }
    

    有没有人有任何想法?我当时认为这可能与域名有关,但我不确定。

    谢谢!

2 个答案:

答案 0 :(得分:7)

我实际上发现(经过数小时和数小时的调试和研究)问题是由于PHP会话锁定引起的。然后,当新页面加载时,它将无法工作,直到旧会话超时。 session_write_close()将修复它。

答案 1 :(得分:1)

php中的

默认会话存储是基于cookie的。如果您正在使用它,则必须在php.ini中为会话cookie设置域

http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain