Вобщем бред какой-то http://narod.ru/disk/11651568001/class. ... n.rar.html создаю объект $objSession = new Sessions(); обновляю страницу 5 раз и такой хлам в базе т.е. если в базе есть запись с таким id сеанса, то нужно обновить запись, а он обновляет старую и добавляет новые, хотя раньше такого не было
велосипедные сессии на php чтото новенькое может на куках написать без использования сессиий вообще. результат один, и если нет разницы то зачем извращаться?
я не доктор, а только учусь. НО может "устаревшие сеансы" удалять в деструкторе, который для этого вроде как предназначен... PS За 11-ю строчку отдельное спасибо, посмеялся хоть немного
написал класс, проверил, всё работало потом что немного доделал (естественно не проверил) и забросил, теперь понадобился и вот такая шляпа Что значит велосипедные? ну можно и в sess_gc , именно это предназначено для очистки сначала грешил на это $this->sess_read($this->php_sess_id); в 246, но нет вообщем не знаю
trofian То есть тебя не очень удивляет, что ты сначала удаляешь "старые" сессии, потом стартуешь сессию (которую мог до этого удалить?)... Но при этом удивляют последствия в базе.
просто ваш скрипт делает двойную работу. сессии в php хранятся в файле, плюс к этому вы их хранение дублируете в базе данных сессии самостоятельно следят за своей актуальностью и удаляются при неспользовании, вы делаете опять тоже самое ослеживаете когда оно удалится -- вы удаляете из базы сессии хранят id и др параметры посетителей вы делаете тоже самое ЭТО и есть велосипед , вы решаете задачи, которые уже давно решены, причем не самым логичным образом. Предлагаю вам использовать куки напрямую без использования сессий. тогда вы получаете 100% контроль над куками и сами управляете всем механизмом идентификации пользователей. вам не нужно прописывать настройки так как у куков их практически нет ваша таблица практически не изменит структуру. в кукам можно обращаться напрямую через суперглобальный массив $_COOKIE и уставливать значение через setcookie() никаких настроек, никаких нагромождений кода, по работе и инциализаций сессий код чище, телодвижений меньше, нагрузка снижена.
Alex_pac А ничего, что куки на клиенте хранятся? Кстати в друпале тоже в базе сессии... Надо всех (а это будет до х..на народа) друпаловцев повесить за это
ознакомьтесь с механизмом работы сесиий, куки ЛЕГКО заставить работать точно также. PS судя по настройкам которые провел trofian в своем классе, он намеренно отказывается от "фишки" из за которой все холивары между сессиями и куками. а именно авторизация при отключенных куках. А ЗНАЧИТ то что я ему советуют более чем приемлемо.
Наверно холивар из-за вопроса "быть сайту 1 день или чуть-чуть побольше?" Точно также вряд ли (скорей точно нет). Мне лучше сразу ключи от квартиры по почте послать, вместе с: логинами, паролями и инструкцией по применению.
Alex_pac php передает управление сессиями этому класс после строки: PHP: <? session_set_save_handler( array (&$this, 'sess_open'), array (&$this, 'sess_close'), array (&$this, 'sess_read'), array (&$this, 'sess_write'), array (&$this, 'sess_destroy'), array (&$this, 'sess_gc') ); session_start вызвается позже, поэтому никакой двойной работы не делается.
Хотя, очевидно, механизм автор ниасилил PHP: <? private function sess_open($save_path, $_session_name) { return true; } public function sess_close() { return true; }
в споре рождается истина, ну чтож. двойной работы значит нет. однако все равно велосипед присутвует в этой части "установления пользовательских функций хранения сессий" а если велосипеду быть то опять получаем практическое отсутвие разницы между классом на сессиях и классом на куках. xayam вы всетаки ниасилили, ну чтож мне жаль смотреть на то как вы говорите о том чего не знаете.
PHP: <? }elseif(isset($res[0]['var_value']) && !empty($res[0]['var_value']) && $val = false){ мне кажется, ошибка в этой строке - тут приравнивание вместо сравнения ($val = false), повторение предыдущего условия (!empty($res[0]['var_value'])) и вообще от такой логики нехорошо стало
Ссылок можешь дать хоть тысячу по тысяче страниц. Ты на пальцах объясни о "классах на куках" Так далеко и не смотрел Тут принципиальная проблема с неиспользованием деструктора...
Незнаю, но получается, что 2 условия выполняются одновременно 0_o? PHP: <?php if($resNum == 1){ $this->native_sess_id = $resSel[0]['id']; $this->user_id = $resSel[0]['user_id']; $arrUpdate = array('session_active' => time(), 'session_counter' => ++$resSel[0]['session_counter']); $arrWhere = array('session_id' => $this->php_sess_id, 'session_remote_address' => $this->get_full_ip()); parent::update($this->session_table, $arrUpdate, $arrWhere); if($resSel[0]['session_logged_in'] == 1){ $this->logged_in = true; $this->user_id = $resSel[0]['user_id']; }else{ $this->logged_in = false; } }elseif($resNum == 0){ $this->logged_in = false; $arrIns = array('session_id' => $this->php_sess_id, 'session_created' => time(), 'session_active' => time(), 'session_remote_address' => $this->get_full_ip()); parent::insert($this->session_table, $arrIns); $this->sess_read($this->php_sess_id); }
Может мы не поняли друг друга. Мне показалось, что Вы все в куках собираетесь хранить, поскольку для меня "сессия" немного абстрактное понятие, не особо связанное с файлами или базами. PS У Вас фамилия не Паклин случайно?
тут я имел ввиду что внутри кода не будет НИ ОДНОЙ стандартной функции както связанной с сессиями только setcookie() и суперглобальный массив $_COOKIE ps нет
Эээ, я могу удалить сессию, до того, как её создал? ведь логичнее сначала избавится от мусора, а потом запустить сессию, а не запустить сессию, и потом разгребать базу от мусора PS даже если это добавить в деструктор PHP: <? // очистка устаревших сеансов из базы $arrDel = array('session_active' => time() - ini_get ("session.gc_maxlifetime")); parent::delete($this->session_table, $arrDel, '<'); parent::optimize($this->session_table); unset ($arrDel); // очистка устаревших переменных из базы $arrDel = array('session_id' => '(SELECT id FROM '. $this->session_table . ')'); parent::delete($this->session_vars, $arrDel, ' NOT IN '); parent::optimize($this->session_vars); unset ($arrDel); проблема остаётся И что тут писать?
одной меньше Даже пример есть на офиц.сайте http://ru.php.net/manual/en/function.session-set-save-handler.php