Делаю класс для управления сеансами на основе базы данных. Сессия запускается следующей функцией: PHP: <? protected function open() { global $db; $cur_time = time(); if ( $_COOKIE['SESSID'] && $_COOKIE['SESSKEY'] ) { $sql = "SELECT * FROM {$this->sessions_table} WHERE sess_id = '" . $_COOKIE['SESSID'] . "' AND sess_key = '" . $_COOKIE['SESSKEY'] . "' AND sess_browser = '" . $_SERVER['HTTP_USER_AGENT'] . "' AND ($cur_time - sess_started) < {$this->session_lifetime} AND ($cur_time - sess_lastactive) < {$this->session_timeout}"; if ( !($result = $db->query($sql)) ) { return false; } if ( $result->num_rows > 0 ) { $this->sessid = $_COOKIE['SESSID']; $this->sesskey = $_COOKIE['SESSKEY']; $sql = "UPDATE {$this->sessions_table} SET sess_lastactive = $cur_time WHERE sess_id = '{$this->sessid}' AND sess_key = '{$this->sesskey}'"; if ( !$db->query($sql) ) { return false; } return true; } } list($this->sessid, $this->sesskey) = $this->_generate_sessid(); $this->set_cookie('SESSID', $this->sessid); $this->set_cookie('SESSKEY', $this->sesskey); $sql = "INSERT INTO {$this->sessions_table} (sess_id, sess_key, sess_browser, sess_started, sess_lastactive) VALUES ('{$this->sessid}', '{$this->sesskey}', '" . $_SERVER['HTTP_USER_AGENT'] . "', $cur_time, $cur_time)"; if ( !$db->query($sql) ) { return false; } return true; } ?> Иными словами, идет проверка на наличие переменных cookie SESSID и SESSKEY. При их наличии сессия проверяется на активность; в случае активности время последней поддержки сессии записывается в базу. Если не удовлетворяется хотя бы одно из этих условий, в базу заносится информация о новой, устанавливаются соответствующие cookie SESSID и SESSKEY. Функция set_cookie() выглядит следующим образом: PHP: <? public function set_cookie($cookie_name, $cookie_value, $cookie_lifetime = 3600) { $cookie_data = $cookie_name . '=' . $cookie_value; $expires = time() + $cookie_lifetime; $domain = 'localhost'; $path = '/'; header('Set-Cookie: ' . $cookie_data . '; expires=' . $expires . '; path=' . $path . '; domain=' . $domain . '; HttpOnly', false); } ?> Проблема в том, что когда я тестирую программу на Opera, все проходит так, как я и ожидаю - сессия поддерживается, пока не истечет срок ее жизни (1 час), или пользователь не совершал действий в течение 5 минут; но вот если проверять ее на IE 6.0 и на Firefox 2.0, при каждом обновлении страницы создается новая сессия, то есть создается впечатление, что не пишутся cookie. Тестирую на localhost. Cookies во всех браузерах разрешены. Подскажите, чем это может быть вызвано?
HiveHicks можно скромный вопрос? чем функция setcookie не угодила? PS: формат даты в expires у вас не верный.
Можно и setcookie - с ней тоже не работает. Я просто привел свою функцию, чтобы было видно, что это не пустышка Почему expires неверный? Вот цитата из мануала:
это параметр функции php должен принимать юниксовый таймстэмп в качестве значения. в заголовках формат даты - другой. http://ru.php.net/manual/ru/function.se ... .php#70959