热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP用mysql数据库存储session的代码

大部分使用php的人一旦应用到session都会使用cookie。cookie虽好可是它也会给我们带来一些隐患的。隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当于没有了。

  大部分使用php的人一旦应用到session都会使用COOKIE。 COOKIE虽好可是它也会给我们带来一些隐患的。
隐患一:如果客户端机器的COOKIE一旦因病毒而失效了,那么session也就相当于没有了。 
隐患二:session在php中默认的是以文件的形式保存在一个临时文件夹里面的,对于一个小型系统来说,这样做完全可以, 
       可是对于一个大型而又被经常访问的系统来说,就不是很好的办法了。假设这个网站一天有1000个人访问。一个月以后session的临时文件夹就会有30000个临时文件。想象一下计算机要从30000里面找一条session_sid是一个多么漫长的事情呀! 
       因此为了提高效率。交易使用用数据库保存session。

具体方法如下: 
1.更改php.ini文件。 
由于php默认保存session的方式是files所以我们要改变它。即:找到“session.save_handler = files”将“files”改为“User”。 
把session的模式改成用户自定义的。 
2.建立数据库: 
CREATE TABLE `db_session` ( 
`sesskey` char(32) NOT NULL, 
`expiry` int(11) unsigned NOT NULL, 
`value` text NOT NULL, 
PRIMARY KEY (`sesskey`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
[/code] 
数据库表明:db_session 
列名:sesskey,expiry,value 其中:sesskey为主键。 
Value里面存放着session里面的值。 
3.建立session_mysql.php文件。这个文件是用来构造保存session的方法的。修改一下参数直接使用就可以了。 
session_mysql.php 
PHP代码: 
代码如下:
$gb_DBname="db_myBBS";//数据库名称 
$gb_DBuser="root";//数据库用户名称 
$gb_DBpass="23928484";//数据库密码 
$gb_DBHOSTname="localhost";//主机的名称或是IP地址 
$SESS_DBH=""; 
$SESS_LIFE=get_cfg_var("session.gc_maxlifetime");//得到session的最大有效期。 
function sess_open($save_path,$session_name){ 
global $gb_DBHOSTname,$gb_DBname,$gb_DBuser,$gb_DBpass,$SESS_DBH; 
if(!$SESS_DBH=mysql_pconnect($gb_DBHOSTname,$gb_DBuser,$gb_DBpass)){ 
echo "

  • MySql Error:".mysql_error()."
  • "; 
    die(); 

    if(!mysql_select_db($gb_DBname,$SESS_DBH)){ 
    echo "
  • MySql Error:".mysql_error()."
  • "; 
    die(); 

    return true; 

    function sess_close(){ 
    return true; 

    function sess_read($key){ 
    global $SESS_DBH,$SESS_LIFE; 
    $qry="select value from db_session 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=$val; 
    $qry="insert into db_session values('$key',$expiry,'$value')"; 
    $qid=mysql_query($qry,$SESS_DBH); 
    if(!$qid){ 
    $qry="update db_session 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 db_session where sesskey = '$key'"; 
    $qid=mysql_query($qry,$SESS_DBH); 
    return $qid; 

    function sess_gc($maxlifetime){ 
    global $SESS_DBH; 
    $qry="delete from db_session where expiry <".time(); 
    $qid=mysql_query($qry,$SESS_DBH); 
    return mysql_affected_rows($SESS_DBH); 

    session_module_name(); 
    session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc"); 
    ?>

    4.建立测试文件。 
    在使用之前必须引用刚刚建立的session_mysql.php文件。 
    session_test.php 
    PHP代码: 
    代码如下:
    include ("session_mysql.php"); 
    session_start(); 
    $_SESSION['abc']= "A: I will be back!"; 
    $_SESSION['meto']= "B: Me too "; 
    $_SESSION['name']= "louis "; 
    echo "click me"; 
    ?>

    get_session_test.php 
    代码如下:
    include ("session_mysql.php"); 
    session_start(); 
    echo $_SESSION['abc']; 
    echo "
    "; 
    echo $_SESSION['meto']; 
    echo "
    "; 
    echo $_SESSION['name']; 
    $_SESSION['wq']="12e"; 
    echo "
    click again"; 
    ?>

    get_session_test2.php 
    代码如下:
    include ("session_mysql.php"); 
    session_start(); 
    echo $_SESSION['abc']; 
    echo "
    "; 
    echo $_SESSION['meto']; 
    echo "
    "; 
    echo $_SESSION['name']; 
    echo "
    "; 
    echo $_SESSION['wq']; 
    //session_destroy();//用来销毁所有session的函数。

    ?>


  • 推荐阅读
    • Windows环境下Oracle数据库迁移实践
      本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
    • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
    • egg实现登录鉴权(七):权限管理
      权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
    • PHP中Smarty模板引擎自定义函数详解
      本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ... [详细]
    • C/C++ 应用程序的安装与卸载解决方案
      本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
    • 本文提供了处理WordPress网站中出现过多重定向问题的方法,包括检查DNS配置、安装SSL证书以及解决数据库连接错误等步骤。 ... [详细]
    • 解决ADODB连接Access时出现80004005错误的方法
      本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
    • Java连接MySQL数据库的方法及测试示例
      本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
    • 本文详细介绍了如何使用SQL*Plus连接Oracle数据库以及使用MySQL客户端连接MySQL数据库的方法,包括基本命令和具体操作步骤。 ... [详细]
    • 本文详细介绍了如何通过JDBC连接Hive进行数据操作,包括Hive服务的启动、相关依赖的配置以及具体代码示例,适合对Hive和JDBC有一定了解的开发者阅读。 ... [详细]
    • 本文详细介绍了MySQL InnoDB存储引擎中的Redo Log和Undo Log,探讨了它们的工作原理、存储方式及其在事务处理中的关键作用。 ... [详细]
    • 本文探讨了MySQL中的死锁现象及其监控方法,并介绍了如何通过配置和SQL语句调整来优化数据库性能。同时,还讲解了慢查询日志的配置与分析技巧。 ... [详细]
    • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
    • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
    • 【MySQL】frm文件解析
      官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
    author-avatar
    手机用户2502895987
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有