PHP Session_start正在挂起

Chr*_*ris 6 php session

这是一个奇怪的问题,好在这里是我的设置......

  1. domain.com调用从sub.domain.com上的iframe读取
  2. sub.domain.com对sub.domain.com/call.php进行ajax调用
  3. sub.domain.com返回对domain.com的ajax调用

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;
        }
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Chr*_*ris 7

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


小智 1

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

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