使用session_set_save_handler函数重载SESSION存储方式之MYSQL

<?

$DB_SERVER = "server"; /* database server hostname */

$DB_NAME = "dbname"; /* database name */

$DB_USER = "root"; /* database user */

$DB_PASS = "*************"; /* database password */

$DB_SELECT_DB = "";

$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

function sess_open($save_path, $session_name) {

global $DB_SERVER, $DB_NAME, $DB_USER, $DB_PASS, $DB_SELECT_DB;

if (! $DB_SELECT_DB = mysql_pconnect($DB_SERVER, $DB_USER, $DB_PASS)) {

echo "SORRY! MYSQL ERROR : Can't connect to $DB_SERVER as $DB_USER";

echo "MySQL Error: ", mysql_error();

die;

}

if (! mysql_select_db($DB_NAME, $DB_SELECT_DB)) {

echo "SORRY! MYSQL ERROR : Unable to select database $DB_NAME";

die;

}

return true;

}

function sess_close() {

return true;

}

function sess_read($SessionKey){

global $DB_SELECT_DB, $SESS_LIFE;

$Query = "SELECT SessionArray FROM cdb_global_sessions WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time();

$Result = mysql_query($Query, $DB_SELECT_DB);

if (list($SessionArray) = mysql_fetch_row($Result)) {

return $SessionArray;

}

return false;

}

function sess_write($SessionKey, $VArray) {

global $DB_SELECT_DB, $SESS_LIFE;

$SessionExpTime = time() + $SESS_LIFE;

$SessionArray = addslashes($VArray);

$Query = "INSERT INTO cdb_global_sessions (SessionKey,SessionExpTime,SessionArray) VALUES ('".$SessionKey."','".$SessionExpTime."','".$SessionArray."')";

$Result = mysql_query($Query, $DB_SELECT_DB);

if (!$Result){

$Query = "UPDATE cdb_global_sessions SET SessionExpTime = '".$SessionExpTime."', SessionArray = '".$SessionArray."' WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time();

$Result = mysql_query($Query, $DB_SELECT_DB);

}

return $Result;

}

function sess_destroy($SessionKey) {

global $DB_SELECT_DB;

$Query = "DELETE FROM cdb_global_sessions WHERE SessionKey = '".$SessionKey."'";

$Result = mysql_query($Query, $DB_SELECT_DB);

return $Result;

}

function sess_gc($maxlifetime) {

global $DB_SELECT_DB;

$Query = "DELETE FROM cdb_global_sessions WHERE SessionExpTime < " . time();

$Result = mysql_query($Query, $DB_SELECT_DB);

return mysql_affected_rows($DB_SELECT_DB);

}

session_set_save_handler(

"sess_open",

"sess_close",

"sess_read",

"sess_write",

"sess_destroy",

"sess_gc");

session_start();

?>

在编写存储过程时使用 Set NoCount On
使用 SET NOCOUNT ON默认情况下,存储过程将返回过程中每个语句影响的行数。如果不需要在应用程序中使用该信息(大多数应用程序并不需要),请在存储过程中使用 SET NOCOUNT ON 语句以终止该行为。根据存储过程中包含...查看完整版>>在编写存储过程时使用 Set NoCount On
 
使用另类方式调用函数
大家可以自己编译运行一下下面的代码,看看为什么是这样哦:)#include <windows.h>#include <stdio.h>void __stdcall Test1(){ printf("Test1\n");} void __stdcall Test2(){ printf("Test2\n");} v...查看完整版>>使用另类方式调用函数
 
优化使用mysql存储session
之前写过两篇文章《自定义SESSION(二)——数据库保存》和《我为什么不使用session》 但后来发现都有问题。前者处理在实际中几乎没什么用处,而且session回收还得自己另外处理。后者频繁的操作数据库,打来了很大的...查看完整版>>优化使用mysql存储session
 
MDaemon以MySQL为存储方式的配置过程
MDaemon以MySQL为存储方式的配置过程
以下将是我详细配置的过程加图片演示:1、先到http://dev.MySQL.com/downloads/下载MyODBC的最新版本,并安装它。安装过程非常的简单,我就不再贴图演示。2、进入MySQL,新建一个用来存储你MDaemon数据的数据库,我这...查看完整版>>MDaemon以MySQL为存储方式的配置过程
 
使用函数递归实现基于php和MySQL的动态树型菜单
树型菜单在很多桌面应用系统中都有非常广泛的应用,其主要优点是结构清晰,利于使用者非常清楚的知道目前自己所在的位置。但在web上树型菜单的应用因 为没有理想的现成组件可以拿过来直接使用,所以一般的情况下,程...查看完整版>>使用函数递归实现基于php和MySQL的动态树型菜单
 
使用"函数递归"实现基于php和MySQL的动态树型菜单
树型菜单在很多桌面应用系统中都有非常广泛的应用,其主要优点是结构清晰,利于使用者非常清楚的知道目前自己所在的位置。但在web上树型菜单的应用因为没有理想的现成组件可以拿过来直接使用,所以一般的情况下,程序...查看完整版>>使用"函数递归"实现基于php和MySQL的动态树型菜单
 
ADO & ADO.NET中使用存储过程的两个共用的函数
在ADO环境下,调用存储过程查询数据时常规做法为:1 创建Connection Command对象2 打开连接,给Command赋参数的名称、数据类型、值3 执行Command对象4 返回给Recordset对象交给客户端这样做每调用一次存储过程都要按照...查看完整版>>ADO & ADO.NET中使用存储过程的两个共用的函数
 
成员函数的重载
  在继续之后有所提高,这是人类进步的一个重要方式。     那么,如何使fillRect类比Rectangle类有所提高呢?我们可以用如下代码来实现一个新的drawRect成员函数,它将大大缩短代码,并能填充矩形,而不是仅...查看完整版>>成员函数的重载
 
成员函数的重载
  成员函数的重载  假如你必须在不同情况下发送不同的信息给同一个成员函数的话,该怎么办呢?你可以通过对此成员函数说明多个版本(version)的方法来实现重载。重载的本质是创建了一个新的成员函数:你只需给它...查看完整版>>成员函数的重载
 
 
回到王朝网络移动版首页