Есть сайт на домене domain.ru есть форум forum.domain.ru, объединил авторизацию через session_set_save_handler через config на domain.ru, несколько дней полет нормальный, а потом падает механизм хранения...
Теперь о самом механизме и далее о проблеме:
имеется таблица в MySql
CREATE TABLE IF NOT EXISTS `sessions` (
`session_id` varchar(255) NOT NULL COMMENT 'Идентификатор сессии',
`date_touched` datetime NOT NULL COMMENT 'Время доступа к данным',
`sess_data` text NOT NULL COMMENT 'Данные сессии',
`user_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
И соответственно обработчик события сессии
define("CookiePath","/");
define("CookieDomain",".domain.ru");
ini_set('session.auto_start', '0');
ini_set('session.use_cookies', '1');
ini_set('session.use_trans_sid', '0');
ini_set('session.save_handler', 'user');
ini_set('session.name', 'PHPSESSID');
ini_set('session.gc_maxlifetime', '259200');
session_set_cookie_params (259200, CookiePath, CookieDomain, false);
session_set_save_handler( 'sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gb' );
@session_start ();
@ob_start ();
function sess_open() {
global $db;
$db = mysql_connect('localhost','km_h','password777') or die ('NO CONNECT');
mysql_select_db('km_km', $db) or die ('NO SELECT DB');
return true;
}
function sess_close() {
global $db;
mysql_close($db);
return true;
}
// Читаем данные
function sess_read($sess_id) {
$sql = 'SELECT `sessions`.* FROM `sessions`WHERE `session_id` = "'.$sess_id.'"';
$result = mysql_query( $sql )or die( mysql_error().'<br />'.$sql );
// Если данные получены, нам нужно обновить дату доступа к данным:
if ( mysql_num_rows( $result ) > 0 ) {
$row = mysql_fetch_assoc( $result );
$sql = 'UPDATE `sessions` SET date_touched=NOW() WHERE session_id="'.$sess_id.'"';
mysql_query($sql)or die(mysql_error().'<br />'.$sql);
// Как мы помним только из этого обработчика. Мы возвращаем данные, а не логическое значение:
return html_entity_decode($row['sess_data']);
} else {
$sql = 'INSERT INTO `sessions` SET user_id="'.$user_data[user_id].'", session_id="'.$sess_id.'", date_touched=NOW()';
mysql_query($sql)or die(mysql_error().'<br />'.$sql);
return '';
}
}
// Пишем данные:
function sess_write($sess_id, $data) {
$sql ='UPDATE `sessions` SET `sess_data`="'.htmlentities($data,ENT_QUOTES).'", `date_touched`= NOW() WHERE `session_id`= "'.$sess_id.'"';
mysql_query($sql)or die(mysql_error().'<br />'.$sql);
return true;
}
// Уничтожаем данные:
function sess_destroy($sess_id) { mysql_query('DELETE FROM `sessions` WHERE `session_id`="'.$sess_id.'"' );
return true;
}
// Описываем действия сборщика мусора:
function sess_gb($sess_maxlifetime) {
mysql_query("DELETE FROM sessions WHERE now() - INTERVAL 30 DAY > date_touched OR now() - INTERVAL 1 DAY > date_touched AND user_id='0'");
return true;
}
Устанавливаю все это дело, авторизуюсь на форуме -> авторизоВАН на сайте и обратно, все норм! Данные в БД заносятся и успешно уничтожаются по sess_destroy и sess_gb
В sess_data попадает все необходимое, а именно код капчи, email, user_id и тд, вот в таком виде: securityCode|s:5:"75002";email|s:18...
А через несколько дней (1-5 дней) при новых авторизациях в sess_data вижу только непонятный набор символов (всегда разный): eUu19uOEftPz2BA0XK00VPAi05S6NSi_prJLL4ndUeGglEzuSQ2K1bcaGB4IJ2AS
Что это за символы не понимаю и откуда берутся тоже, после их появления и авторизации на forum.domain.ru все норм, но при попытки перейти на domain.ru слетает и там и там, тоже самое и в обратку =(((...
Совсем голову сломал себе, подскажите плз, почему так может происходить и почему через несколько дней?
Буду очень благодарен даже за предположения!