substacks / mongosession
MongoDB 封装的 PHP 会话处理器。https://www.coreyballou.com
This package is not auto-updated.
Last update: 2024-09-20 19:25:00 UTC
README
MongoSession PHP 会话处理器类被构建为可轻松切换使用 Mongo 处理会话的即插即用组件。它是 VPS 服务器上内存池重新排列导致性能下降时的绝佳替代品。目前使用 MongoDB 作为会话处理器的固有风险,您可以在文档页面上阅读有关这些风险的信息
http://www.jqueryin.com/projects/mongo-session/
会话处理器最近已更新,以执行原子更新,这是针对由发出 AJAX 命令引起的竞态条件问题的快速(尽管不是100%有效)修复。这通常不会对大多数网站造成问题,除非您正在执行一系列修改相同会话数据字段的异步 AJAX 请求。
默认用法
如果您只在本地主机上运行单个 MongoDB 服务器,您可以简单地加载该类,它将使用默认配置值。由于 Mongo 中不存在此类功能,因此无需预先创建数据库或集合。如果数据库或集合不存在,它们将在第一次会话插入时创建。请注意,在调用 header() 之前,应将此代码放置在文件顶部
<?php // include the session handler require_once('MongoSession.php'); // load the session $session = new MongoSession();
覆盖默认配置设置
您可以通过传递包含以下任何参数的数组来覆盖 MongoSession 中的配置设置。以下是默认设置,仅供参考。
<?php $config = array( // cookie related vars 'cookie_path' => '/', 'cookie_domain' => '.mydomain.com', // .mydomain.com // session related vars 'lifetime' => 3600, // session lifetime in seconds 'database' => 'session', // name of MongoDB database 'collection' => 'session', // name of MongoDB collection // persistent related vars 'persistent' => false, // persistent connection to DB? 'persistentId' => 'MongoSession', // name of persistent connection // whether we're supporting replicaSet 'replicaSet' => false, // array of mongo db servers 'connectionString' => 'mongodb://USER:PASSWORD@HOST:PORT/Database' ); $session = new MongoSession($config);
激活标志的原因
垃圾收集器 gc() 更新激活标志而不删除条目的原因是它旨在进行速度优化。本类的理论使用方法是设置周期性 cronjob,批量删除具有激活标志设置为0的任何会话。
本库的将来版本将包括 cronjob 示例。对于那些不关心实现此功能的人,您可以在 read()、write() 和 gc() 中完全删除对激活标志的所有引用。最后,您需要更新 gc() 以删除文档
<?php public function gc() { // define the query $query = array('expiry' => array('$lt' => time())); // update options $options = array( 'justOne' => TRUE, 'safe' => TRUE, 'fsync' => TRUE ); // update expired elements and set to inactive $this->_mongo->remove($query, $options); return true; }
高级用法
如果您目前正在运行多个 Mongo 服务器(例如副本集或分片),您有更多高级配置选项来指定多个服务器。此功能尚未经过测试。
注意
如果您分叉此库并进行了任何重大更新或错误修复,请考虑发送推送请求。