zoukankan      html  css  js  c++  java
  • php中session数据库存储实例详解

    虽然通过改变 Session 存储文件夹使 Session 不至于将临时文件夹填满而造成站点瘫痪,但是可以计算一下,如果一个大型网站一天登录 1000 人,一个月登陆了30000人,这时站点中存在 30000 个Session 文件 ,然而要在这 30000 个文件夹中查询一个 session_id 应该不是一件很轻松的事情,这个时候就需要应用到 session 数据库存储, 也就是PHP 中的 session_set_save_handle()函数。其语法格式如下:直线电机原理结构图

    1

    session_set_save_handle(open, close, read, write, destroy,gc);

    session_set_save_handle()函数的参数说明如下的形式:

    参 数 说 明
    open(save_path, session_name) 找到 Session 存储地址,取出变量名称
    close() 不需要参数,关闭数据库
    read(key) 读取 Session 键值, key 对应 session_id
    write(key, data) 其中data 对应设置的 Session 变量
    destroy(key) 注销 session 对应 Session 键值
    gc(expiry_time) 清除过期的 Session 记录

    一般应用参数直接使用变量,但是此函数中参数为 6 个函数,而且在调用时只是调用函数名称的字符串。下面将分别介绍这几个参数,最后将这些函数封装到一个类中。

    (1)封装 session_open()函数,连接数据库,其代码格式如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    <?php

      function session_open($save_path,$session_name)

      {

         //连接 mysql 数据库

         $handle = mysqli_connect('localhost','root','root','db_test');

         // 判断数据库是否成功

         if(!$handle)

         {

            die('打开数据库失败');

         }

      }

    ?>

    说明:在上面的代码中, $save_path和$session_name 两个参数并没有被使用,在这里可以将这两个参数去除,但是一般情况下还是建议朋友们保留输入的这两个参数,因为一般都会使用这两个变量。

    (2)封装 session_close()函数,关闭数据库的连接,其代码格式如下:

    1

    2

    3

    4

    5

    6

    7

    8

    <?php

      function session_close()

      {

         $handle = mysqli_connect('localhost','root','root','db_test');

         mysqli_close($handle);

         return(true);

      }

    ?>

    说明: 在这个函数中是不需要任何参数的,所以不论是 Session 存储到数据库还是文件中,只需要返回 true 即可。 但如果是 MYSQL 数据库,最好是将数据库关闭,以保证以后不会出现麻烦。

    (3)封装 session_read()函数,在函数中设定当前时间的 UNIX 时间戳,根据 $key 值查找 Session 名称及内容,其实例代码如下所示:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    <?php

      function session_read($key)

      {

         //连接数据库

         $handle = mysqli_connect('localhost','root','root','db_test');

         //设定当前时间

         $time = time();

         $sql = "select session_date from tb_session where session_key='$key'and session_time>$time ";

         $result = mysqli_query($handle,$sql);

         $row = mysqli_fetch_array($result);

         if($row)

         {   //返回 Session 名称和内容

            return($row['session_date']);

         }else{

            return(false);

         }

      }

    ?>

    说明 存储进数据库中的 session_expiry 是 UNIX 时间戳。

    (4)封装 session_write()函数, 函数中设置了 Session 失效时间, 查找 Session 名称及内容。如果查询的结果为空,则将当前页面中的 Session 根据 session_id、session_name 、失效时间插入到数据库中;如果查询结果不为空,则根据 $key 修改数据库中 Session 存储信息,返回执行的结果,其实例代码如下所示:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    <?php

      function session_write($key,$data)

      {

         //连接数据库

         $handle = mysqli_connect('localhost','root','root','db_test');

         //设定失效时间

         $time = 60*60;

         // 得到 UNIX 时间戳

         $lapse_time = time() + $time;

         $sql = "select session_date from tb_session where session_key='$key'and session_time>$lapse_time ";

         $result = mysqli_query($handle,$sql);

         if(mysqli_num_rows($result) == 0)  // 没有结果

         {    //插入数据库SQL语句

            $sql = "insert into tb_session values ('$key','$data',$lapse_time)";

            $result = mysqli_query($handle,$sql);

         }else{

            // 修改数据库SQL语句

            $sql = "update tb_session set session_key='$key', sessoin_data='$data', session_time=$lapse_time where session_key='$key' ";

            $result = mysqli_query($handle,$sql);

         }

         return($result);

      }

    ?>

    (5)封装 session_destroy()函数,根据 $key 值将数据库中 Session 删除,其代码显示如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    <?php

      function session_destroy($key)

      {

         //连接数据库

         $handle = mysqli_connect('localhost','root','root','db_test');

         // 删除 Session 的 SQL 语句

         $sql = "delete from tb_session where session_key='$key'";

         $result = mysqli_query($handle,$sql);

         return($result);

      }

    ?>

    (6)封装 session_gc()函数, 根据给出的失效时间删除过期 Session,其代码显示如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    <?php

      function session_gc($expiry_time)

      {

         //连接数据库

         $handle = mysqli_connect('localhost','root','root','db_test');

         // 将参数$expiry_time 赋值为当前时间戳

         $lapse_time = time();

         // 删除 Session 的 SQL 语句

         $sql = "delete from tb_session where expiry_time<$lapse_time";

         $result = mysqli_query($handle,$sql);

         return($result);

      }

    ?>

    以上为 session_set_save_handler()函数的 6 个参数(函数)。

    下面通过函数 session_set_save_handler()实现 Session 存储数据库,其实现的代码如下:https://www.furuihua.cn/article/420.html

    1

    2

    3

    4

    5

    6

    <?php session_set_save_handler('session_open','session_close','session_read','session_write','session_destroy','session_gc');

      session_start();

      // 下面为我们定义的 Session

      $_SESSION['user'] = 'tom';

      $_SESSION['pwd'] = '12345';

    ?>

  • 相关阅读:
    如何将自己编写的软件放在真机上运行
    多台Mac电脑使用一个apple开发者账号
    Xcode5最初级的教程
    利用NSIS软件制作C#安装包
    C#针对DataTable进行分页方法
    Json 的日期格式转换成DateTime
    FI & RI
    Rename a TFS Project Collection
    char、varchar、nchar、nvarchar的区别
    Migration from TF Service to TF Server with the TFS Integration Platform
  • 原文地址:https://www.cnblogs.com/furuihua/p/12206749.html
Copyright © 2011-2022 走看看