我已经使用 CodeIgniter 系统有一段时间了 - 但它有它的缺点。我很感激它教给我的东西,但现在我需要一个用于新的非 codeigniter 项目的库,所以我正在四处寻找关于哪些库有正确的东西和哪些没有的想法。我可能不得不从几个图书馆中获取我需要的一切。
我只是看了一下Kohana PHP 会话库,我喜欢它如何返回到使用 $_SESSION 超全局而不是强制更改为 $this->session 以进行数据访问的原生 PHP 方式。
无论如何,我想知道是否还有其他好的会话库我可能会搞砸。除了功能上的 CRUD 之外,会话中还必须处理很多事情。
- 支持基于非 cookie 的会话传递(即 Facebook 或 Flash 上传器)
- “Flash 数据”仅持续到下一页加载,然后被自动删除。
- 与 $_SESSION 或 $this->session 一起使用,这样程序员就不必更改现有代码。
- 支持设置新的会话 id(即 session_id('new id')),以防您想在页面中途更改 id。
- 在页面请求结束时保存所有数据,而不是每次添加或删除数据时(节省额外的数据库查询)。
- 支持使用文件、cookie 或数据库进行存储。(或者memcached会很好)
- 在会话劫持的情况下尝试拒绝访问。(IP、用户代理或指纹)
我刚刚花了一些时间研究 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
}