`

mongodb探索2

阅读更多
1  mongodb处理session:

    cookie只是session绑定客户端的一种途径,其它的还有比如url等 session_set_save_handler仅仅是对服务器端,session的存储方式,默认为文件存储,可更改为任何其它存储,比如数据库,memcache等
  可以使用 session_set_save_handler的函数:
  bool session_set_save_handler(callback $open, callback $close,
callback $read, callback $write,
callback $destroy, callback $gc)
    注意: 使用本函数前,先要配置php.ini文件,session.save_hadler=user ,否则,session_set_save_handler()不会生效。

   第一个参数是打开会话时调用的处理器,接受两个参数 save_path 和 session_name,分别是会话保存路径 (要记得 PHP 默认机制是文件方式的,因此有文件路径) 和 COOKIE 中用于保存 SESSION ID 的键名,其中键名可以通过 session_name 来获取和修改

第二个参数是关闭会话时的处理器,没有参数

第三个参数是读取会话时的处理器,接受一个参数 session_id,代表 COOKIE 中保存的会话 ID

第四个参数是保存会话时的处理器,接受两个参数 session_id 和 session_data。官方手册中提及到,PHP 5.0.5 以后,close 和 write 处理器将会在类析构之后调用,因此处理器内不能使用类和抛出异常 (Exception 也是一个类) 而在析构函数内可以使用 SESSION,因此我们需要在程序中 (比如在 open 或者 read 处理器内) 声明一下保证让 session_write_close 在析构前完成

register_shutdown_function('session_write_close');

第五个参数是删除会话时的处理器,接受一个参数 session_id,代表 COOKIE 中保存的会话 ID

最后一个参数是会话过期时的处理器,接受一个参数 maxlifetime,代表超时秒数

2 一个PHP连接MONGODB的类
   <?php

class DBConnection
{
    const HOST   = 'localhost';
    const PORT   = 27017;
    const DBNAME = 'myblogsite';
   
    private static $instance;
   
    public $connection;   
    public $database;
   
    private function __construct()
    {
        $connectionString = sprintf('mongodb://%s:%d', DBConnection::HOST, DBConnection::PORT);

        try {
           
            $this->connection = new Mongo($connectionString);
            $this->database = $this->connection->selectDB(DBConnection::DBNAME);
       
        } catch (MongoConnectionException $e) {
            throw $e;
        }
    }
   
    static public function instantiate()
    {
        if (!isset(self::$instance)) {
            $class = __CLASS__;
            self::$instance = new $class;
        }
       
        return self::$instance;
    }
   
    public function getCollection($name)
    {
        return $this->database->selectCollection($name);
    }
}
?>

3 一个处理session的类,sessionmanager:
   <?php

require_once('dbconnection.php');

class SessionManager{
       
    const COLLECTION = 'sessions'; //name of collection where sessions will be stored
   
    const SESSION_TIMEOUT = 600;    //Expire session after 10 mins in inactivity
    const SESSION_LIFESPAN = 3600;  //1 hour
    const SESSION_NAME = 'mongosessid'; //name of the session cookie
   
    const SESSION_COOKIE_PATH = '/';
    const SESSION_COOKIE_DOMAIN = ''; //should domain name of you web app, for example .mywebapp.com
   
    private $_mongo;
    private $_collection;
   
    private $_currentSession;
   
    public function __construct()
    {
        $this->_mongo = DBConnection::instantiate();
        $this->_collection = $this->_mongo->getCollection(SessionManager::COLLECTION);
       
        session_set_save_handler(
            array(&$this, 'open'),
            array(&$this, 'close'),
            array(&$this, 'read'),
            array(&$this, 'write'),
            array(&$this, 'destroy'),
            array(&$this, 'gc')           
        );
       
        // set session garbage collection period
        ini_set('session.gc_maxlifetime', SessionManager::SESSION_LIFESPAN);

        session_set_cookie_params(  SessionManager::SESSION_LIFESPAN,
                                    SessionManager::SESSION_COOKIE_PATH,
                                    SessionManager::SESSION_COOKIE_DOMAIN
        );
       
       
        session_name(SessionManager::SESSION_NAME);
        session_cache_limiter('nocache');
        session_start();
    }
   
    public function open($path, $name)
    {
        return true;
    }
   
    public function close()
    {
        return true;
    }
   
    public function read($sessionId)
    {
        $query = array(
                        'session_id' => $sessionId,
                        'timedout_at' => array('$gte' => time()),
                        'expired_at' => array('$gte' => time())
                      );
                     
        $result = $this->_collection->findOne($query);
       
        $this->_currentSession = $result;
       
        if(!isset($result['data'])){
            return '';
        }
       
        return $result['data'];
    }
   
    public function write($sessionId, $data)
    {
        $new_obj = array(
                          'data' => $data,
                          'timedout_at' => time() + self::SESSION_TIMEOUT,
                          'expired_at' => (empty($this->_currentSession)) ? time() + SessionManager::SESSION_LIFESPAN
                                                                          : $this->_currentSession['expired_at']
                        );

        $query = array('session_id' => $sessionId);
       
        $this->_collection->update(
                                    $query,
                                    array('$set' => $new_obj),
                                    array('upsert' => True)
                                  );
        return True;
    }
   
    public function destroy($sessionId)
    {
        $this->_collection->remove(array('session_id' => $sessionId));
       
        return True;
    }
   
    public function gc()
    {
        $query = array('expired_at' => array( '$lt' => time()));
       
        $this->_collection->remove($query);
       
        return True;
    }
   
    public function __destruct()
    {
        session_write_close();
    }
}

$session = new SessionManager();
1
2
分享到:
评论

相关推荐

    mongoDB的官方中文文档

    2. **集合(Collections)**:在MongoDB中,数据以文档的形式存储在集合里,类似于关系数据库中的表格。集合是动态模式的,不需要预先定义模式,这意味着你可以随时添加新的字段。 3. **CRUD操作**:创建(Create)...

    mongodb入门

    MongoDB是一种流行的开源NoSQL数据库系统,它以其高性能、高可用性和易...随着经验的积累,你可以进一步探索MongoDB的高级功能,比如索引优化、复制集、分片、聚合操作等,从而成为一名真正熟练掌握MongoDB的开发者。

    mongodb安装包和compass

    Compass是MongoDB的官方图形界面工具,它提供了一个用户友好的界面,用于可视化数据库和集合,帮助开发者和管理员进行数据探索、查询构建、性能分析以及基本的数据库管理。通过Compass,用户可以轻松地浏览和操作...

    MongoDB with F#

    ### 使用 F# 探索 MongoDB #### 背景与目的 随着 NoSQL 数据库的兴起,MongoDB 成为了许多开发者的首选方案。对于 F# 开发者来说,结合 MongoDB 的灵活性与 F# 的强大功能可以实现高效快速的原型开发。本文旨在探讨...

    数据库mongodb的软件

    5. 探索MongoDB的管理工具,如`mongoimport`和`mongoexport`,以及监控和诊断工具。 总之,MongoDB以其独特的特性和灵活性,在现代数据存储方案中占据了一席之地。无论是小型项目还是大型企业,都可以从中受益。...

    window下的mongodb安装包

    MongoDB是一款开源、高性能、无模式的分布式文档型数据库,常用于构建现代应用...了解这些基础知识后,你就可以开始探索MongoDB的更多功能,如副本集、分片、索引、聚合框架等,以及如何使用它来构建高效的应用程序。

    studio-3t mongodb连接工具

    2. **查询构建器**:内置的查询构建器允许用户通过拖放操作创建复杂的查询,无需记住复杂的MongoDB查询语法。 3. **脚本支持**:支持JavaScript和MongoDB Shell命令,方便执行脚本和命令操作。 4. **数据导入导出**...

    MongoDB的分析和报告的解决方案

    Databazel可能是一个用于MongoDB数据分析的工具或框架,虽然具体功能未知,但通常这样的工具会提供更高级的查询和分析功能,简化报表生成过程,或者提供可视化界面来交互式地探索数据。例如,它可以包含数据预处理...

    MongoDB Client 客户端工具

    MongoDB Compass是官方提供的图形化界面工具,它可以帮助用户直观地理解数据结构,通过可视化的方式探索和操作数据。用户可以轻松浏览集合、查询文档、分析数据分布、监控性能指标,以及进行聚合操作。Compass还支持...

    mongodb 手册,帮助文件。

    - 探索 MongoDB 提供的各种驱动程序。 #### 二、管理 MongoDB **3.1 启动、停止和运行数据库** - **启动 MongoDB**:通过服务或命令行启动 MongoDB。 - **停止 MongoDB**:安全地停止 MongoDB 服务。 - **运行...

    tp6+mongodb.zip

    《深入解析ThinkPHP6与MongoDB的整合及问题修复》 ...而MongoDB则作为NoSQL数据库的代表,以其灵活的数据模型和高性能在大数据处理领域备受青睐。...在这个过程中,不断学习和探索,对提升我们的IT专业技能大有裨益。

    windows下MongoDB的安装及配置

    接下来您可以开始探索 MongoDB 的各种功能,并将其应用到实际项目中。MongoDB 的灵活性和高性能使其成为处理大数据量和高并发场景的理想选择。希望这篇文章能帮助您顺利完成 MongoDB 的安装与配置过程。

    mongoDB-CURD操作-----JAVA

    了解这些基础后,你可以进一步探索更多高级特性,如索引、副本集、分片等,以便在实际项目中更高效地利用MongoDB。记住,实践是学习的最佳途径,动手尝试这些示例,结合MongoDB_Demo中的代码,你会更快掌握MongoDB与...

    很全的_Mongodb数据库学习文档_与_php操作mongodb

    ### MongoDB数据库学习精要与PHP操作指南 #### MongoDB基本概念概览 MongoDB是一种开源的文档型NoSQL数据库,以其高性能、高可用性和易用性而闻名,特别...不断探索和实践,才能在日益复杂的技术环境中保持竞争力。

    mongodbDemo

    MongoDB是一款分布式文档型数据库,以其灵活性、高性能和易扩展性在现代Web开发中占据了重要地位。本"mongodbDemo"提供了对MongoDB的基础使用和测试案例,非常...记得在实践中不断探索和尝试,加深对MongoDB的理解。

    mongodb-linux-x86_64-rhel70-4.4.13安装包和conf配置文件

    你现在已经具备了运行、管理MongoDB数据库的基础知识,可以进一步探索复制集、分片、索引、聚合等功能,以满足更复杂的应用场景。同时,作为运维人员,了解数据库性能监控、备份恢复以及安全性策略也是必不可少的...

    mongodb例子

    MongoDB是一个基于分布式文件存储的开源数据库系统,广泛应用于现代应用程序开发中,特别是在...通过实践和探索,学习者能够更好地理解NoSQL数据库的优势,并了解如何利用MongoDB来处理大数据和构建高性能的应用程序。

    MongoDB.in.Action.2nd.Edition.2016.3.pdf

    - **第2章:通过JavaScript Shell探索MongoDB** - **简介**:本章通过JavaScript Shell工具来展示如何与MongoDB进行交互。 - **内容概览**: - 安装和配置MongoDB环境 - 使用JavaScript Shell连接到MongoDB实例...

Global site tag (gtag.js) - Google Analytics