PHP Session_start висит - PullRequest
       9

PHP Session_start висит

6 голосов
/ 24 февраля 2010

Какая-то странная проблема, хорошо, вот мои настройки ...

  1. вызовы domain.com читают из Iframe на sub.domain.com
  2. sub.domain.com выполняет ajax-вызов sub.domain.com/call.php
  3. sub.domain.com возвращает вызов ajax на domain.com

АКА длинный опрос

Теперь все работает отлично, когда нет данных сеанса (я закрываю браузер и перезагружаю страницу). Однако, как только я перезагружаю страницу и она является данными сеанса, 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 ]

7 голосов
/ 25 февраля 2010

Я действительно обнаружил (после нескольких часов отладки и исследований), что проблема вызвана тем, что сеанс PHP блокируется. Затем, когда загружается новая страница, она не будет работать, пока не истечет время старого сеанса. Session_write_close () исправит это.

1 голос
/ 25 февраля 2010

хранилище сессии по умолчанию в php основано на cookie. если вы используете его, вы должны установить домен для файла cookie сеанса в php.ini

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...