使用数据库保存session的方法

2016-01-29 13:51 23 1 收藏

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

【 tulaoshi.com - PHP 】

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

(本文来源于图老师网站,更多请访问https://www.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) 
);

(本文来源于图老师网站,更多请访问https://www.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); 
 
 

来源:https://www.tulaoshi.com/n/20160129/1491795.html

延伸阅读
SQL Server 2008 备份数据库: 1.打开SQL , 找到要备份的数据库 , 右键 任务 备份 2.弹出 [ 备份数据库对话框 ] ,如图: 3.点击添加 [ 按钮 ] . 如下图: 4.选择要备份的路径 和 备份的文件名 点击 [ 确定 ]. 5.然后就一直点击确定就可以了 . 然后我们来到D:\ 看看 6.这个时候 , 你可以把它压缩打包什么的 , 要用的时候 , 在...
从本节开始正式介绍各种SQL语句。本节介绍有关数据库级的SQL以及相关操作,查看、建立和删除等操作。 用SHOW显示已有的数据库 句法:SHOW DATABASES [LIKE wild] 如果使用LIKE wild部分,wild字符串可以是一个使用SQL的“%”和“_”通配符的字符串。 功能:SHOW DATABASES列出在MySQL服务器主机上的数据库。 你可...
很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询)。现在,就让我们追本溯源地探究这个问题。  有两种子查询类型:标准和相关。标准子查询执行一次,结果反馈给父查询。相关子查询每行执行一次,由父查询找回。在本文中,我将重点讨论嵌套子查询(nested subqueries...
面向:初学者。 目的:如果一年的数据较多,希望在分年的数据库中保存数据。 知识点: 1.数据库拆分。 2.文件查找技术。 3.文件复制。 4.链接表的刷新。 步骤: 1.将一些每年都要使用(修改,添加等)的表的名称前两个字母改为共同的(如:Or_业务人员名单,Or_收货人名单等),注意不要是“MS”,“SW”,“US”等系统要使用的字母。 2.将...
如何利用SSH(Shell)来备份和恢复MySQL数据库的方法 例如: 数据库参数为:: MySQL地址:mysql.dh.net MySQL名称:mysql_dbname MySQL用户:mysql_dbuser MySQL密码:mysql_dbpass 我要把数据库备份为bak.sql 步骤: 同样,使用windows系统自己带的telnet或者去下载一个putty来,登陆以后,一路cd到自己觉得合适的目录下(确认当前目录可写). 输...

经验教程

1000

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部