PHP会话的最佳库

时间:2009-07-11 17:45:09

标签: php codeigniter session kohana

我一直在使用CodeIgniter系统一段时间 - 但是it has它是short comings。我很感激它教给我的东西,但现在我需要一个新的非codeigniter项目的库,所以我正在寻找关于哪些库有正确而哪些没有的想法。我可能不得不从几个图书馆拿走我需要的东西。

我刚看了一下Kohana PHP session库,我喜欢它返回到使用$ _SESSION超全局的原生PHP方式,而不是强制更改为$ this->会话进行数据访问。 / p>

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

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

4 个答案:

答案 0 :(得分:5)

你看过Zend_Session吗?

  • 您可以使用PHP设置
  • 通过URL传递会话标识符
  • 您可以按时间或跳数(请求)使某些会话变量失效
  • 迁移到其他应用程序并不是那么容易,我认为当您使用$_SESSION
  • 时弄乱Zend_Session时效果不是很好
  • Zend_Session有一个基于adpater的方法来保存会话数据。包含了save-handler个数据库,但其架构允许传入自定义处理程序。
  • Zend_Session支持验证程序检查会话的有效性。在这里,我们也有一个开放式架构,允许您传入自定义对象进行验证。
  • 您可以锁定会话,也就是将其设为只读
  • 您可以阻止实例化同一会话命名空间的多个实例
  • 此外还有更多要发现Zend_Session,例如重新生成会话ID,发出记住我的Cookie,撤销记住我的Cookie等等。

答案 1 :(得分:3)

您可以在CI中使用此功能:EchoSession

答案 2 :(得分:3)

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

Here is the code如果有人想在构建自己的库时使用它或阅读它。我留下了很多评论,彻底解释了整个事情,并希望得到一些反馈。它支持令牌,基于闪存的上传者,cookie,会话每5分钟(或任何你设置)的会话重新删除旧会话,并支持在任何数据库,文件系统,memchache或任何其他你想要的表单中存储会话集。

答案 3 :(得分:3)

看看Zebra_Session, a wrapper for PHP’s default session handling functions, using MySQL for storage

  • 充当PHP默认会话处理函数的包装器,但不是将会话数据存储在平面文件中,而是将它们存储在MySQL数据库中,从而提供更好的安全性和更好的性能

  • 它是PHP默认会话处理程序的简单替代品:PHP会话的使用方式与使用库之前的方式相同;您无需更改任何现有代码!

  • 实现行锁定,确保在具有多个并发AJAX请求的场景中正确处理数据

  • 仅限一个文件

  • 成熟,高度优化且不断发展

  • very good documentation