• php SESSION入库的实现


    session入库,就是重写session制机,在session的周期内,获得到session的数据并记录到数据库

     Session默认是存放到服务器上的文件中,不方便管理,如果能把session存放到数据库中就可以方便的对数据库进行管理了

    比如:

    session入库可以解决哪些问题?

    1.      可以解决跨域操作

    2.      可以实现单点登陆

    3.      可以统计在线人数

    4.      可以实现同一时只允许一个用户在线

    session_set_save_handler的回掉函数描述

    实现session入库

           第一步:在php.ini配置文件中设置session.save_headler=user(默认是file)

                         或者使用ini_set设置ini_set(‘session.save_handler’,’user’);

           第二步:创建一个存放session的数据表

                  session_id用于存放session_id的,字段类型为字符型,长度为32

                  session_value用于存放session的内容,字段类型为text

        session_life   用于存放session的生存期

            第三步:session_set_save_handler ( callback $open , callback $close ,callback $read , callback $write , callback $destroy , callback $gc )

         第四步:代码实现

    <?php
    header('content-type:text/html;charset=utf-8');
    
    //将session存储方式设置为存入数据库的方式
    //session.save_handler = files
    ini_set("session.save_handler", "user");
    
    session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
    
    //打开并连接数据库
    function open()
    {
        //使用pdo
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
        $pdo->exec('set names utf8');
    }
    
    //关闭连接
    function close()
    {
        //使用pdo
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
        $pdo->exec('set names utf8');
        $pdo = null;
    }
    
    //从表中中读信息
    function read($session_id)
    {
        //使用pdo
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
        $pdo->exec('set names utf8');
        $read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);
        return $read["session_info"];
    }
    
    //将session存入数据库
    function write ($session_id,$session_info)
    {
        // echo $session_id. "        " . $session_info;
        //使用pdo
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
        $pdo->exec('set names utf8');
        $read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);
    
        if(empty($read))
        {
            $time = time();
            $pdo->exec("insert into session (session_id, session_info, session_life) values ('$session_id', '$session_info', '$time')");
        }
        else
        {
            $sql = "update session set session_info='$session_info' where session_id='$session_id'";
            $pdo->exec($sql);
        }
    }
    
    //销毁指定session
    function destroy($session_id)
    {
        //使用pdo
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
        $pdo->exec('set names utf8');
        $pdo->exec("delete from session where session_id='$session_id'");
    }
    
    //删除所有过期的session
    function gc()
    {
    
    }
    
    session_start();
    //判断是否有session
    if(isset($_SESSION['name']))
    {
    
        $status = 1;
    }
    else
    {
        $status = 0;
    
    }
    
    //获取需要接收的值
    $user_name = isset($_POST['user_name'])?$_POST['user_name']:null;
    $user_pwd = isset($_POST['user_pwd'])?$_POST['user_pwd']:null;
    //使用pdo
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
    $pdo->exec('set names utf8');
    $sql = "select * from user where username = '$user_name' and password = '$user_pwd' ";
    $re = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
    if($re)
    {
        $status = 1;
        $_SESSION['name'] = $user_name;
    }
    
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <?php if($status == 0){?>
        <h3>服务器3</h3>
        <form action="a.php" method="post">
            <table>
                <tr>
                    <td>姓名:</td>
                    <td><input type="text" name="user_name"></td>
                </tr>
                <tr>
                    <td>密码:</td>
                    <td><input type="password" name="user_pwd"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="登录"></td>
                </tr>
            </table>
        </form>
    <?php } else{?>
        <h2>欢迎<?=$_SESSION['name']?>登录</h2>
        <h3>服务器3</h3>
    <?php }
    ?>
    </body>
    </html>
  • 相关阅读:
    Spring之InstantiationAwareBeanPostProcessor接口介绍
    Spring之BeanPostProcessor(后置处理器)介绍
    JVM中垃圾收集算法总结
    JVM中对象的回收过程
    zookeeper实现动态感知服务器上下线
    Spring事务的传播行为
    java工厂模式
    Spring加载流程源码分析03【refresh】
    Redis客户端操作之Jedis
    微服务设计的四个原则
  • 原文地址:https://www.cnblogs.com/lguow/p/10766551.html
Copyright © 2020-2023  润新知