+ -
当前位置:首页 → 问答吧 → 抛砖引玉系列 -- 使用ADODB实现session共享

抛砖引玉系列 -- 使用ADODB实现session共享

时间:2006-05-15

来源:互联网

如果您的应用系统为了应对大量并发访问而采用多台web前端来分担负载。这时如何在多台web服务器上共享session就是一个很重要的问题。
php为我们提供了session_module_name和session_set_save_handler函数来自定义session信息的存储、访问、回收等函数。
ADODB是使用广泛的数据抽象层之一,他在提供统一数据访问格式的基础上利用session_set_save_handler实现了将session信息数据存入数据库。

下面我们就介绍一下如何使用ADODB的这个功能
1、首先我们下载最新版本的ADODB。下载地址:http://adodb.sourceforge.net/#download
解压缩后将ADODB文件加方在你的应用程序根目录下。打开adodb/session目录你会看到有几个扩展名为.sql的文件。这就是存放session数据的数据表。
选择与你使用的数据库类型相同的一个sql文件。建立session数据表。

2、我们将所有配置信息放在配置文件中,在其他项目文件中包含即可。
config.php:

<?php
        GLOBAL
                $ADODB_SESSION_DRIVER,          // SESSION服务器的数据库类型   
                $ADODB_SESSION_CONNECT,   // SESSION服务器IP地址
                $ADODB_SESSION_USER,      // SESSION服务器的用户名
                $ADODB_SESSION_PWD,       // SESSION服务器的密码
                $ADODB_SESSION_DB,        // SESSION服务器的数据库名
                $ADODB_SESSION_TBL;       // SESSION数据表名

                $ADODB_SESSION_DRIVER  = "mysql";
                $ADODB_SESSION_CONNECT = "localhost";
                $ADODB_SESSION_USER    = "root";
                $ADODB_SESSION_PWD     = "123456";   
                $ADODB_SESSION_DB      = "sessiondb";
                $ADODB_SESSION_TBL     = "sessions";       

        // 包含相关的文件
        include_once('adodb/adodb.inc.php');
        include_once('adodb/session/adodb-session.php');
       
        session_start();
?>

3、在项目文件中包含以上配置即可。
index.php:

<?php
        include_once 'config.php';
       
        // 使用session跟以前一模一样,呵呵。
        $_SESSION['TEST'] = 'ADODB SESSION';

        do other stuff......
?>

文件执行完毕后会自动调用close方法关闭连接。
session信息被回收的时间由php.ini的配置决定。


以上是最基本的默认使用方法。默认打开一个持久性的连接,如果想每次请求数据库打开一个非持久性连接需要在
session_start()函数前显式调用adodb_sess_open(false,false,false);这个函数的原形为adodb_sess_open($path, $sessname, $connectMode)
其中第三个参数就是定义数据库的连接方式。(关于连接方式请查阅adodb相关手册)
$connectMode |        Connection Method
true               |        PConnect( )
false              |        Connect( )
'N'              |         NConnect( )
'P'              |        PConnect( )
'C'              |        Connect( )

如果你需要将数据库中的session信息加密。就将include_once('adodb/session/adodb-session.php');改为include('adodb/session/adodb-cryptsession.php');

作者: dreamriver   发布时间: 2006-05-15

这么好的帖子,没人顶太可惜了.

作者: kupe   发布时间: 2007-11-30

作者: luzhou   发布时间: 2007-11-30