Я использую систему CodeIgniter какое-то время, но он имеет короткие номера. Я благодарен за то, чему он меня научил, но теперь мне нужна библиотека для нового проекта, не являющегося когнинификатором, и поэтому я ищу варианты, по которым библиотеки имеют все правильно, а какие нет. Мне, вероятно, придется брать кусочки из нескольких библиотек, чтобы получить все, что мне нужно.
Я просто просмотрел библиотеку Kohana PHP session, и мне нравится, как она возвращается к собственному PHP-способу использования $_SESSION superglobal вместо того, чтобы принудительно изменить сеанс $this- > для доступа к данным.
Во всяком случае, я хотел знать, есть ли там другие хорошие библиотеки сеансов, которые могут быть беспорядочными. Существует много вопросов, которые необходимо обрабатывать в сеансе, кроме CRUD, функционально.
- Поддержка прохождения сеанса на основе cookie (например, Facebook или Flash)
- "Данные Flash", которые сохраняются только для загрузки следующей страницы, а затем автоматически удаляются.
- Работает с $_SESSION или $this- > session, так что программистам не нужно менять существующий код.
- Поддерживает установку нового идентификатора сеанса (т.е. session_id ('новый id')), если вы хотите изменить идентификатор в середине страницы.
- Сохраняет все данные в конце запроса страницы, а не каждый раз, когда данные добавляются или удаляются (сохраняются дополнительные запросы к БД).
- Поддерживает использование файлов, куки или базы данных для хранения. (или memcached будет хорошо)
- Попытка запретить доступ в случае захвата сеанса. (IP, useragent или отпечаток пальца)
Я просто потратил некоторое время на логику для сессионных библиотек CodeIgniter и Kohana, и я придумал следующее о том, как каждый начинает и заканчивает сеансы для страницы.
/**************
** Kohana Sessions
**************/
If not native file storage {
session_set_save_handler to the storage type (DB, cache, cookie...)
}
set the session_name() so php knows what cookie value to check
start session
/****** Saving ******/
session_write_close() which calls the given handler
/**************
** CI Sessions
**************/
Try to read_session() -> {
session = Get cookie (if using cookies will also contain data)
if(database) {
session .= pull data from database
}
checks if valid...
$this->userdata = session data
} else {
create a new one
}
/****** Saving ******/
session data is serialized either way
if(cookie) {
save cookie with serialized data and params like "last_activity"
}
if(database) {
save serialized data in db and session in cookie
}