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