Здравствуйте, у меня возникла проблема именно с браузером Опера или я что-то в коде напутал, помогите разобраться! для начала я напишу код своих файлов: файл index.php PHP: <?php header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate( "D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); include_once ('include/function.php'); general::sessionConfig(); session_start(); $p = page::getPage(); $p->getUser(); ?> файл function.php PHP: define("KEYS","gh5f67fdghf756gf7557fbv5c7"); function __autoload($cl){ if(file_exists($_SERVER["DOCUMENT_ROOT"]."/include/".$cl."/".$cl.".inc")) require_once($_SERVER["DOCUMENT_ROOT"]."/include/".$cl."/".$cl.".inc"); elseif(file_exists($_SERVER["DOCUMENT_ROOT"]."/module/".$cl."/".$cl.".inc")) require_once($_SERVER["DOCUMENT_ROOT"]."/module/".$cl."/".$cl.".inc"); else return false; } файл general.inc PHP: class general{ static function sessionConfig(){ ini_set("session.auto_start",0); ini_set("session.name",'RED'.md5(KEYS)); ini_set("session.gc_probability",1); ini_set("session.gc_divisor",5); ini_set("session.cookie_lifetime",3600);//для примера ini_set("session.use_cookies",1);//1 ini_set("session.use_only_cookies",1); } //и другие функции } Файл page.inc с классом page PHP: class page{ private static $pageObj; private $db; private $setting = array(); private $path = array(); private $user = null; private $module = array(); private $obj = null; const index_setting = "sys"; const index_callback = "callback"; private function __construct(){ $this->db = base::setBase(); $this->res = null; $arr_setting = array(); $arr_setting = $this->db->getWhere("setting"); for($i=0;$i<count($arr_setting);$i++){ $this->setting[$arr_setting[$i]["set_attribute"]][$arr_setting[$i]["set_name"]] = $arr_setting[$i]["set_value"]; } if(isset($_GET[$this->setting[self::index_setting]["NAME_GET"]])){ $arr_path = trim($_GET[$this->setting[self::index_setting]["NAME_GET"]], "/"); $this->path["all"] = $arr_path; $this->path["get"] = explode("/", $arr_path); }else{ $this->path["all"] = $this->setting[self::index_setting]["DEFAULT_GET"]; $this->path["get"] = explode("/", $this->setting[self::index_setting]["DEFAULT_GET"]); } if(count($_POST) !== 0){ foreach ($_POST as $key => $value){ $this->path["post"][$key] = $value; } }else{ $this->path["post"][$this->setting[self::index_setting]["NAME_POST"]] = $this->setting[self::index_setting]["DEFAULT_POST"]; } $this->path["ip"] = $_SERVER['REMOTE_ADDR']; $this->path["nameSession"] = 'RED'.md5(KEYS); $this->path["sid"] = session_id(); $this->path["keys"] = md5($this->setting[self::index_setting]["PRIMARY_KEY"].$this->path["sid"]); } public function getUser(){ if(!isset($_COOKIE[$this->path["nameSession"]])){ setcookie($this->path["nameSession"],$this->path["sid"],general::detectTime("time")+ini_get("session.cookie_lifetime")); $this->db->Insert("session",array(null,0,$this->path["keys"],general::detectTime("time"))); } else{ $old_keys = md5($this->setting[self::index_setting]["PRIMARY_KEY"].$_COOKIE[$this->path["nameSession"]]); $arr_ses = $this->db->getWhere("session",array("ses_sid"=>$old_keys)); if($arr_ses === false){ setcookie($this->path["nameSession"],$this->path["sid"],general::detectTime("time")+ini_get("session.cookie_lifetime")); $this->db->Insert("session",array(null,0,$this->path["keys"],general::detectTime("time"))); }else{ // следующий код он не особо важен в данной ситуации и здесь нет запросов на добавление записей } } } public static function getPage(){ if(self::$pageObj === null){ self::$pageObj = new page(); } return self::$pageObj; } Класс base содержит функции для работы с базой данных! В браузерах Internet Explorer и Mozilla Firefox при нажатии кнопки обновить не происходит добавления информации о сессии в таблицу session, а вот в опере происходит добавление записи в таблицу! У меня такое впечатление, что происходит образование 2 объектов класса page! Пробовал выводить в браузер все запросы к БД - все запросы соответствуют задуманной логике, запросов на добавление записей нет, а записи добавляются! помогите разобраться!!!!!!!
Чтобы работала подсветка кода, вставь вначале <? После 54-й строки добавь PHP: <? header('Location: '.$_SERVER['PHP_SELF']);
Это я всё понимаю! Я не могу понять вот что: 1.У меня класс page (в котором происходит добавление записи в БД) должен быть в одном экземпляре, другого не должно быть (функция page::getPage()), как тогда в одном окне браузера Опера при обновлении может появиться ещё один эеземпляр объекта page, который добавляет запись! 2. Класс для работы с БД тоже написан с private __construct(), то-есть 2-ого экземпляра не должно быть!
Alex_@ Когда ты открываешь один и тот же URL в двух разных вкладках браузера, сервер запускает два РАЗНЫХ экземпляра одного и того же скрипта. ВНУТРИ КАЖДОГО будет только один экземпляр page, но для сервера, для базы данных ИХ БУДЕТ 2 Точно так же и с БД. Это 2 РАЗНЫХ запуска интерпретатора php, 2 разных соединения, одно ничего не знает о другом.
я это понимаю, для каждого браузера свой COOKIE, но я говорю только об Опере! я обновляю страницу в опере и у меня появляется лишняя запись в БД, другие браузеры при этом закрыты! такой "косяк" я наблюдаю только в Опере, другие браузеры при этом закрыты!