📄 usesession.php
字号:
<?php
//确保PHP配置文件设置正确
assert(ini_get('session.save_handler') == 'user');
//取得存储session数据的表格名称,默认为:'php_sessions'
$pgsql_session_table = ini_get('session.save_path');
if (empty($pgsql_session_table)) $pgsql_session_table = 'php_sessions';
//全局变量,PostgreSQL 数据库连接句柄
$pgsql_session_handle = 0;
/*********************************************
function: 建立一个新的session.
$param $save_path session.save_path的值
$param $session_name session ('PHPSESSID')名称
*********************************************/
function pgsql_session_open($save_path, $session_name)
{
global $pgsql_session_handle;
//请参考PHP手册中的pg_pconnect()函数
$params = 'dbname=test user=jon';
$pgsql_session_handle = pg_pconnect($params); //连接数据库服务器
return ($pgsql_session_handle != 0);
}
/***************************************
function: 关闭当前的session.
***************************************/
function pgsql_session_close()
{
global $pgsql_session_handle;
if (isset($pgsql_session_handle)) {
return pg_close($pgsql_session_handle); //断开与服务器的连接
}
return true;
}
/**************************************
function: 从数据库中读取session数据
$param $key 请求的session ID.
*************************************/
function pgsql_session_read($key)
{
global $pgsql_session_handle, $pgsql_session_table;
$key = addslashes($key);
//构造并执行SQL语句
$query = "select data from $pgsql_session_table where session_id = '$key'";
$result = @pg_exec($pgsql_session_handle, $query); //执行SQL语句
//把数据保存到$data变量并返回
if (isset($result) && $result && (pg_numrows($result) == 1)) {
$data = pg_result($result, 0, 'data');
pg_freeresult($result);
return $data;
} else {
return false;
}
}
/************************************
function: 把session数据写出到数据库中
$param $key 当前session ID.
$param $val 存放session数据的字符串.
***************************************/
function pgsql_session_write($key, $val)
{
global $pgsql_session_handle, $pgsql_session_table;
$key = addslashes($key);
$val = addslashes($val);
$now = time();
//从当前session中删除所有数据,然后插入一个新的
//包含当前session数据的行。所有操作使用一个语句
$query = 'begin; ';
$query .= "delete from $pgsql_session_table where session_id = '$key'; ";
$query .= "insert into $pgsql_session_table values('$key', $now, '$val'); ";
$query .= 'commit;';
$result = @pg_exec($pgsql_session_handle, $query);
$ret = (pg_cmdtuples($result) == 0);
pg_freeresult($result);
return ($ret);
}
/*************************************
function: 删除session记录.
$param $key 当前的session ID.
*************************************/
function pgsql_session_destroy($key)
{
global $pgsql_session_handle, $pgsql_session_table;
$key = addslashes($key);
//删除session记录
$query = "delete from $pgsql_session_table where session_id = '$key'";
$result = @pg_exec($pgsql_session_handle, $query);
$ret = ($result != 0);
pg_freeresult($result);
return $ret;
}
/******************************************
function: 删除超时的session的内容
$param $maxlifetime session的最长有效时间.
******************************************/
function pgsql_session_gc($maxlifetime)
{
global $pgsql_session_handle, $pgsql_session_table;
$expiry = time() - $maxlifetime; //计算超时的时间
$query = "delete from $pgsql_session_table where last_active < $expiry";
$result = @pg_exec($pgsql_session_handle, $query); //删除超时的记录
$ret = ($result != 0);
pg_freeresult($result);
return $ret;
}
//注册上面定义的session处理函数。
session_set_save_handler(
'pgsql_session_open',
'pgsql_session_close',
'pgsql_session_read',
'pgsql_session_write',
'pgsql_session_destroy',
'pgsql_session_gc'
);
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -