PHP会话的最佳库 [已关闭]

2022-08-30 21:18:36

我已经使用CodeIgniter系统一段时间了 - 但它有缺点。我很感激它教给我的东西,但现在我需要一个新的非代码标记项目的库,所以我正在寻找关于哪些库有正确和哪些没有的想法。我可能不得不从几个图书馆中获取一些东西才能获得我需要的一切。

我刚刚看了一下Kohana PHP会话库,我喜欢它如何返回到使用$_SESSION超全球的本机PHP方式,而不是强制更改为$this>会话以进行数据访问。

无论如何,我想知道是否有其他好的会话库,我可能会搞砸。除了CRUD在功能上之外,会话中还必须处理很多事情。

  • 支持非基于cookie的会话传递(即Facebook或Flash上传者)
  • 仅在下一页加载时持续存在的“Flash数据”,然后被自动删除。
  • 使用 $_SESSION 或 $this->session,以便程序员不必更改现有代码。
  • 支持设置新的会话ID(即session_id(“新id”)),以防您想要在页面中途更改ID。
  • 在页面请求结束时保存所有数据,而不是每次添加或删除数据时保存(保存额外的数据库查询)。
  • 支持使用文件、Cookie 或数据库进行存储。(否则膜卡奇会很好)
  • 在会话劫持的情况下尝试拒绝访问。(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
}

答案 1

你看过Zend_Session吗?

  • 您可以使用PHP设置通过URL传递会话标识符
  • 您可以按时间或跃点(请求)使某些会话变量过期
  • 迁移到其他应用程序不会那么容易,我认为当你在使用时搞砸时,它不是很好$_SESSIONZend_Session
  • Zend_Session具有基于 adpater 的方法来保存会话数据。包括 DB 的保存处理程序,但其体系结构允许传入自定义处理程序。
  • Zend_Session支持验证程序检查会话的有效性。在这里,我们也有一个开放的架构,允许您传入自定义对象进行验证。
  • 您可以锁定会话,即将其设为只读
  • 您可以阻止实例化同一会话命名空间的多个实例
  • 此外,还有很多东西需要发现,例如重新生成会话ID,发布remember-me-cookie,撤销remember-me-cookie等。Zend_Session

答案 2

好吧,在挖掘了自定义的,非基于$_SESSION的codeigniter lib,两个Kohana和Zend库(使用$ _SESSION)以及其他项目中的其他几个会话库之后,我相信我构建了我的问题的答案。满足我上面列出的所有内容(Flash数据除外)的东西。

这是代码,如果有人想在构建自己的库时使用它或阅读它。我留下了很多评论,彻底解释了整个事情,并希望对此有一些反馈。它支持令牌,基于Flash的上传器,Cookie,每5分钟(或您设置的任何内容)的会话重新生成,删除旧会话,并支持将会话存储在任何数据库,文件系统,memchache或您想要设置的任何其他形式中。


推荐