• 技术文章 >php教程 >php手册

    ThinkPHP实现将SESSION存入MYSQL的方法,thinkphpmysql

    2016-06-13 09:29:08原创477

    ThinkPHP实现将SESSION存入MYSQL的方法,thinkphpmysql


    本文以实例讲解了ThinkPHP实现将SESSION存入MYSQL的方法,所采用的运行环境是ThinkPHP3.1.2版

    首先index.php中设置为:

    <?php
    define('APP_DEBUG', true);//设置为调试模式
    require '../ThinkPHP/ThinkPHP.php';//设置入口文件
    ini_set("session.save_handler", "user");//设置PHP的SESSION由用户定义
    
    

    在config.php中设置为:

    <?php
    return array(//'配置项'=>'配置值'
          // 添加数据库配置信
      'SHOW_PAGE_TRACE' =>true,
      'DB_TYPE'  => 'mysql', // 数据库类型
      'DB_HOST'  => 'localhost', // 服务器地址
      'DB_NAME'  => 'thinkphp', // 数据库名
      'DB_USER'  => '你的用户名', // 用户名
      'DB_PWD'  => '你的密码', // 密码
      'DB_PORT'  => 3306, // 端口
      'DB_PREFIX' => 'think_', // 数据库表前缀缀
    'SESSION_OPTIONS'=>array(
        'type'=> 'db',//session采用数据库保存
        'expire'=>1440,//session过期时间,如果不设就是php.ini中设置的默认值
      ),
    'SESSION_TABLE'=>'think_session', //必须设置成这样,如果不加前缀就找不到数据表,这个需要注意
    );
    ?>
    

    数据库设置采用SessionDb.class.php中的DDL,不过后面加了ENGINE=MyISAM DEFAULT CHARSET=utf8

    CREATE TABLE think_session (
        session_id varchar(255) NOT NULL,
        session_expire int(11) NOT NULL,
        session_data blob,
        UNIQUE KEY `session_id` (`session_id`)
      )ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    

    现在访问你的 index.php 后再在 phpmyadmin 中找到 think_session 表,我们会惊喜的发现多了条数据。
    至此问题搞定。其他不要设置了,SessionDb.class.php会自动加载.

    这样ThinkPHP的调用

    session('session_name','session_value')

    系统就会自动把这个session存储上面创建的数据库中。


    探讨怎把session存入数据库

    建立数据库和数据库的表结构,我们可以采用php可以使用的任何的数据库,因为php和mysql的结合最好,我就使用mysql来做事例,当然根据你的需要可以改称别的数据库,同时因为mysql没有事物的功能,这也比别的数据库更快,然而保存session 书、一 不许要事物处理的,再者里我决的更好。
    创建数据库:
    复制代码 代码如下:CREATE DATABASE 'session'; 创建表结构 CREATE TABLE 'session'( id CHAR(30) NOT NULL , 'user 'CHAR(30), data CHAR(3000) ,PARMIRY BY ('id') );
    下面我们来编写保存session的文件session_start.php
    复制代码 代码如下:$con =mysql_connection("127.0.0.1","user" , "pass");
    mysql_select_db("session");
    function open($save_path, $session_name){return(true);}function close(){return(true);}function read($id){if($result = mysql_query("SELECT * FROM session WHERE id='$id'")){if($row = mysql_felth_row($result ))
    { return $row["data"]; }}else{return "";}}function write($id, $sess_data){if($result = mysql_query("UPDATE session SET data='$sess_data' WHERE id='$id'")){return true;}else{return false;}}function destroy($id){if($result = mysql_query("DELETE * FROM session WHERE id='$id'")){return true;}else{return false;}}/*********************************************
    * WARNING - You will need to implement some *
    * sort of garbage collection routine here. *
    *********************************************/
    function gc($maxlifetime){return true;}session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
    session_start();
    /&#......余下全文>>
     

    怎验证存入数据库的session_id?

    在你后台的公共模块里面写一个方法,该方法的作用就是将产生的session_id与数据库的session_id比对,如果相同,说明已经登录,不过不同则没有登录。然后在需要验证登录的模块中调用该方法即可。
     

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:ThinkPHP SESSION MYSQL session
    上一篇:PHP的魔术常量__METHOD__简介,常量__method_ 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)• PHP实现远程下载文件到本地,• Sajax融合服务器端的PHP和JS• php给rar文件添加解压说明实现代码• PHP中Unicode的签名问题
    1/1

    PHP中文网