substacks / mongosession

MongoDB 封装的 PHP 会话处理器。https://www.coreyballou.com

v1.0.0 2017-04-13 02:10 UTC

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 服务器(例如副本集或分片),您有更多高级配置选项来指定多个服务器。此功能尚未经过测试。

注意

如果您分叉此库并进行了任何重大更新或错误修复,请考虑发送推送请求。

Bitdeli Badge