使用数据库保存session的方法

颜小寕

颜小寕

2016-01-29 13:51

使用数据库保存session的方法,使用数据库保存session的方法

使用数据库保存session的方法
php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当一个用户由于某种安全原因关闭了浏览器的cookie,程序中的session相关操作将无法执行。因此,如果能以数据库保存session数据,将不受客户端设置的限制,并且在性能和扩展性等方面有一个飞跃。程序中使用关键函数是session_set_save_handler,同时要将php.ini里的session.save_handler = files 改为 user。这里我们讨论的环境是linux(freesd)+apache+mysql+php。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)

数据表结构:[sessions]
CREATE TABLE sessions ( 
sesskey char(32) not null, 
expiry int(11) unsigned not null, 
value text not null, 
PRIMARY KEY (sesskey) 
);

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)

程序代码:[session_inc.php]
<?php 
$SESS_DBHOST = "yourhost"; /* database server hostname */ 
$SESS_DBNAME = "yourdb"; /* database name */ 
$SESS_DBUSER = "youruser"; /* database user */ 
$SESS_DBPASS = "yourpassword"; /* database password */ 
 
$SESS_DBH = ""; 
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); 
 
function sess_open($save_path, $session_name) { 
    global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH; 
 
    if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) { 
        echo "<liCan't connect to $SESS_DBHOST as $SESS_DBUSER"; 
        echo "<liMySQL Error: " . mysql_error(); 
        die; 
    } 
 
    if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) { 
        echo "<liUnable to select database $SESS_DBNAME"; 
        die; 
    } 
 
    return true; 

 
function sess_close() { 
    return true; 

 
function sess_read($key) { 
    global $SESS_DBH, $SESS_LIFE; 
 
    $qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry " . time(); 
    $qid = mysql_query($qry, $SESS_DBH); 
 
    if (list($value) = mysql_fetch_row($qid)) { 
        return $value; 
    } 
 
    return false; 

 
function sess_write($key, $val) { 
    global $SESS_DBH, $SESS_LIFE; 
 
    $expiry = time() + $SESS_LIFE; //过期时间 
    $value = addslashes($val); 
 
    $qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')"; 
    $qid = mysql_query($qry, $SESS_DBH); 
 
    if (! $qid) { 
        $qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry " . time(); 
        $qid = mysql_query($qry, $SESS_DBH); 
    } 
 
    return $qid; 

 
function sess_destroy($key) { 
    global $SESS_DBH; 
 
    $qry = "DELETE FROM session_tbl WHERE sesskey = '$key'"; 
    $qid = mysql_query($qry, $SESS_DBH); 
 
 

展开更多 50%)
分享

猜你喜欢

使用数据库保存session的方法

PHP
使用数据库保存session的方法

学习使用数据库MySQL

MySQL mysql数据库
学习使用数据库MySQL

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle数据库数据导入方法

编程语言 网络编程
Oracle数据库数据导入方法

SQL Server 2008 备份数据库、还原数据库的方法

编程语言 网络编程
SQL Server 2008 备份数据库、还原数据库的方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Access中利用拆分后端数据库保存不同数据

编程语言 网络编程
Access中利用拆分后端数据库保存不同数据

用数据库保存VB程序的用户设置

编程语言 网络编程
用数据库保存VB程序的用户设置

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

.NET之ASP Web Application快速入门(4)

.NET之ASP Web Application快速入门(4)

Flash 8中文版视频教程 绘画-打孔

Flash 8中文版视频教程 绘画-打孔
下拉加载更多内容 ↓