首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

session_set_save_handler的调用过程是如何样的

2012-03-23 
session_set_save_handler的调用过程是怎么样的?PHP code?php/**CREATE TABLE IF NOT EXISTS `sessions`

session_set_save_handler的调用过程是怎么样的?

PHP code
<?php/**CREATE TABLE IF NOT EXISTS `sessions` (  `session` varchar(255) character set utf8 collate utf8_bin NOT NULL,  `session_expires` int(10) unsigned NOT NULL default '0',  `session_data` text collate utf8_unicode_ci,  PRIMARY KEY  (`session`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; */class Session {    /**     * a database connection resource     * @var resource     */    private static $_sess_db;    /**     * Open the session     * @return bool     */    public static function open() {                if (self::$_sess_db = mysql_connect('localhost', 'root', '')) {            return mysql_select_db('my_application', self::$_sess_db);        }        return false;    }    /**     * Close the session     * @return bool     */    public static function close() {        return mysql_close(self::$_sess_db);    }    /**     * Read the session     * @param int session id     * @return string string of the sessoin     */    public static function read($id) {        $id = mysql_real_escape_string($id);        $sql = sprintf("SELECT `session_data` FROM `sessions` WHERE `session` = '%s'", $id);        if ($result = mysql_query($sql, self::$_sess_db)) {            if (mysql_num_rows($result)) {                $record = mysql_fetch_assoc($result);                return $record['session_data'];            }        }        return '';    }    /**     * Write the session     * @param int session id     * @param string data of the session     */    public static function write($id, $data) {        $sql = sprintf("REPLACE INTO `sessions` VALUES('%s', '%s', '%s')",                       mysql_real_escape_string($id),                       mysql_real_escape_string(time()),                       mysql_real_escape_string($data)                       );        return mysql_query($sql, self::$_sess_db);    }    /**     * Destoroy the session     * @param int session id     * @return bool     */    public static function destroy($id) {        $sql = sprintf("DELETE FROM `sessions` WHERE `session` = '%s'", $id);        return mysql_query($sql, self::$_sess_db);    }    /**     * Garbage Collector     * @param int life time (sec.)     * @return bool     * @see session.gc_divisor      100     * @see session.gc_maxlifetime 1440     * @see session.gc_probability    1     * @usage execution rate 1/100     *        (session.gc_probability/session.gc_divisor)     */    public static function gc($max) {        $sql = sprintf("DELETE FROM `sessions` WHERE `session_expires` < '%s'",                       mysql_real_escape_string(time() - $max));        return mysql_query($sql, self::$_sess_db);    }}//ini_set('session.gc_probability', 50);ini_set('session.save_handler', 'user');session_set_save_handler(array('Session', 'open'),                         array('Session', 'close'),                         array('Session', 'read'),                         array('Session', 'write'),                         array('Session', 'destroy'),                         array('Session', 'gc')                         );if (session_id() == "") session_start();//session_regenerate_id(false); //also works fineif (isset($_SESSION['counter'])) {    $_SESSION['counter']++;} else {    $_SESSION['counter'] = 1;}echo '<br/>SessionID: '. session_id() .'<br/>Counter: '. $_SESSION['counter'];


"open" /* session_start()调用 */  
"close" /* 程序结束时调用 */  
"read" /* session_start()调用 */  
"write" /* 程序结束时调用 */  
"destroy" /* session_destroy()调用 */  
"gc" /* 操作系统gc进程调用 */

上面是我从网上的例子中看到的(原文链接http://blog.csdn.net/zf213/archive/2009/06/22/4288567.aspx)


他例子中是
session_set_save_handler(array('Session', 'open'),
  array('Session', 'close'),
  array('Session', 'read'),
  array('Session', 'write'),
  array('Session', 'destroy'),
  array('Session', 'gc')
  );

if (session_id() == "") session_start();
这样来调用,但他例子中的
function write($id, $data)
不是需要传递2个参数吗?而且这2个参数没设置默认值,所以肯定是要传递的吧??
谁能帮忙解释下一个session从初始化到被销毁时,session_set_save_handler是如何工作的?

[解决办法]
session_set_save_handler 只是通知php用用户定义的session方法替代php原有的处理而已

[解决办法]

探讨

引用:
session_set_save_handler 只是通知php用用户定义的session方法替代php原有的处理而已

是不是可以这样理解
PHP原本的session处理中也有open、close、read、write等方法,然后用户可以通过session_set_save_handler函数来让php调用用户自定义的open、close等方法……

热点排行