<?php use infrajs\db\Db; $db =& Db::pdo(); if (!$db) { return; } $sql = <<<END CREATE TABLE IF NOT EXISTS `ses_sessions` ( `session_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id сессии', `password` varchar(255) NOT NULL COMMENT 'Пароль сессии', `email` varchar(255) COMMENT 'Email чтоб была возможность авторизироваться и чтоб сессия для одного email-а была уникальная, сама сессия email никак не обрабатывает, обработка делается отдельно кому это надо.', `date` DATETIME NULL DEFAULT NULL COMMENT 'Дата верификации', `verify` int(1) unsigned, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; END; try { $r = $db->exec($sql); } catch (Exception $e) { echo '<pre>'; print_r($e); die(print_r($db->errorInfo(), true)); } if ($r === false) { Ans::err(print_r($db->errorInfo(), true)); } $sql = <<<END CREATE TABLE IF NOT EXISTS `ses_records` ( `rec_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id записи в сессию', `session_id` int(10) NOT NULL COMMENT 'Уникальный идентификатор сессии пользователя',
public static function writeNews($list, $session_id) { if (!$list) { return; } $db =& Db::pdo(); global $infra_session_lasttime; $isphp = !!$infra_session_lasttime; $sql = 'insert into `ses_records`(`session_id`, `name`, `value`, `time`) VALUES(?,?,?,FROM_UNIXTIME(?))'; $stmt = $db->prepare($sql); $sql = 'delete from `ses_records` where `session_id`=? and `name`=? and `time`<=FROM_UNIXTIME(?)'; $delstmt = $db->prepare($sql); Each::exec($list, function &($rec) use($isphp, &$delstmt, &$stmt, $session_id) { $r = null; if (!$isphp && $rec['name'][0] == 'safe') { return $r; } $name = Sequence::short($rec['name']); $delstmt->execute(array($session_id, $name, $rec['time'])); $stmt->execute(array($session_id, $name, Load::json_encode($rec['value']), $rec['time'])); if (!$isphp && !$name) { //Сохранится safe Session::clear(); } return $r; }); }