Ребята у меня в связи с тем, что я пишу собственную библиотеку, есть вопросы по работе со временем в php не конкретно по каким либо функциям, я вроде покурил мануал, и тут скорее вопрос существенно о том как это лучше реализовать, ну и собственно задача которую я реализовываю. Я делаю общий модуль, аутентификации в библиотеки в связи с ним создаю сессии. Решил чтобы обеспечить лучшую защиту, я создаю при входе и регистрации сессию, но я сделал отдельно глобальную функцию Она вот, я её ещё пишу. Это так черновой набросок. Но структура будет примерно такая Что я решил сделать, я решил при открытии сессии, и и записывании в глобальный массив PHP: $_SESSION['Какой то ключ'] = $value Так же создавать под неё строчку в БД в таблице CFSSession. Таблица будет иметь такой вид. PHP: $this->int('id', '11');// integer primory A-I $this->varchar('cfe_name', '30'); // Имя - это ключ Сессии, либо ключ к собственным глобальным переменным, или кукам $this->varchar('cfe_type', '25'); // Тип - или Сессия, или куки, либо это строка собственная переменная $this->varchar('cfe_hash', '255'); // Зашифрованный ключ сессии Будет рендомное уникальное число шифрованое в bCrypt $this->timestamp('cfe_created_date'); // И дата Создания Этой переменной $this->save(); На этом не всё, будет создана ещё одна таблица для связки строки сессии, либо кука с id пользователя которая будет иметь следующий вид PHP: $this->integer('user_id', '11');// integer (просто уникальный) несёт ключ к id пользователя $this->integer('cfe_id', '11'); // Ключ к строчке с сессие, или куку, или собственной переменной глобальной. $this->timeDate('cfe_timeDeathe', '4'); // Несёт в себе значение времени смерти этой строки $this->save(); Что я хочу сделать, я хочу чтобы при задании в столбце, этой таблицы, времени Смерти - cfe_timeDeathe. Указывалось время жизни текущей строки в бд. И когда оно истечёт, нафиг удалить эту строку. Вот это мне нужно для дальнейшей реализации. Пока ума не приложу как мне, в php запустить это чтобы она потом фоново стёрлась, без курла. Ниже примерный набросок, просто моего класса, за всё это отвечающий. Он ещё в разработке и это так на скорую руку просто структуру написал, где что писать. И там ещё дописываю. Но пока застопорился именно на удалении по времени жизни. PHP: <?php /** * Created by PhpStorm. * User: askanim * Date: 22.06.2016 * Time: 11:59 */ namespace System\Gabriel; use System\Http\Model\Model; class CFESession { static private $currentToken = []; static private $DB; public static function start () { /* * Стартует сессию * * * */ start_session(); static::$DB = new Model(); } public static function cfeSession ($value, $string) { /* * Добавляет новую сессию * и записывает её в массив текущих переменных * $this->currentToken * */ $_SESSION[$string] = $value; static::$currentToken[$string] = $value; } public static function getSession ($string) { /* * Получение сессии * * */ if (!empty($_SESSION[$string])) return $_SESSION[$string]; else return 'Не опознанная сессия '.$string; } public function getCurrentToken ($string) { /* * Возвращает токен; * $this->currentToken; * Указаный в $string; * * * */ return $this->currentToken[$string]; } }
Копал, копал. Накопал. Докопался до shell command И выяснил что в php, есть возможность отправлять shell команды веб серверу. И что не обязательно мне блин прописывать вручную команды в линукс. Если мне нужно например curl запустить... Знал бы раньше не написал что не нужно использовать curl. В этой теме с shell и работы с curl ещё новичёк. Если кто может подсказать. Подскажите направление размышлений, по какому лучше пойти и какую команду лучше использовать, для запуска курла, а то в php есть команда exece() есть system, а есть и passthru. ммм....
Посмотри в сторону memcache или redis. Там можно будет раздать время жизни ключа и он автоматом потрётся по истечению срока годности. Про всякие вызовы системных команд: так лучше не делать. По умолчанию половина этих функций отключена в целях безопасности. Ну и в конце концов, ты можешь делая выборку указывать срок жизни в условиях выборки, и фильтровать тем самым кортежи с истекшим сроком. А потом кроном раз в месяц/сутки/час чистить СУБД от мусора.
Почему отключена ?) Это же на уровне сервера будет происходить внутри машина, Там даже ни каких внешних сподвигов на это не будет. Всё будет происходить внутри скрипта, у меня при регистрации будет создаваться стркоа в бд, которая удалить через там например 1 час. И когда она удалится, при следующей загрузке страницы пойдёт запрос к бд, есть там эта строчка или нет, если нет, то гуд бай. Закрываем тек сессию, и прощаемся с пользователем который в сети, если же, он при авторизации, указал запомнить меня, то строчка в бд становится вечной пока он не сделает выход, из своего личного кабинета например.
Отключены в целях безопасности. Чтоб дырявый код рукожопого программиста не позволил через эти дыры выполнять шел-команды от имени эффективного пользователя. Если уверен в безопасности своих действий - можешь включить. Ну ок. Рассмотри вариант с полем срока годности и фильтру по нему при запросе.
Идея в принципе хорошая, но, запуск крона так же через шел я буду осуществлять, ибо я хочу, чтобы моя библиотека, использовалась без лазания в командную строку веб - сервера... А то на ларавеле меня этот курл убил нафиг. Берёт и дёргает каждую секунду, сервак, гоняет даже в пустую. Для того чтобы типа команды работали... Может конечно, это и по борабану серверу. Но мне как то не нравится что у меня например где то в коде что там не понятно зачем просто так дёргается, если мне нужен этот курл, только на определённые задачи... Я просто не хочу чтобы у меня угнали сессию и пытаюсь как то обезопаситься чтобы если и угонят сессию, то она веса иметь не будет. Она разово будет проверяться и заносится в БД, и я не буду хеш хранить в сессии, я буду хранить id в сессии тек пользователя и делать $_POST запрос на стороне сервере к той таблице где у меня хранится User_id, и если там есть запись, то значит это пользователь как бы типа в сети, если нет иди нахрен, и если да она там есть, то делаем запрос к хешу, и сравниваем с хешем пользователя в бд в одной базе, и в другой если всё ок то всё ок)
Запуск крона через шел это вызов из шела бинарника пхп. А я про отключение возможности из бэкэндов веб-сервера (мод_пхп, фпм, сиджиай) выполнять шел-команды. Две разные ситуации. Последняя опасна, поэтому ограничена. Если есть доступ к крону - вообще ж проблем никаких не будет с уборкой мусора.