黑马程序员技术交流社区

标题: 【上海校区】session入库以及php高版本下session入库报错的解... [打印本页]

作者: 为热爱挥汗    时间: 2018-9-11 11:12
标题: 【上海校区】session入库以及php高版本下session入库报错的解...
本帖最后由 上海分校-小影 于 2018-9-14 09:37 编辑

session入库以及php高版本(7.2)下session入库报错的解决办法

我们在php7.0下,实现session入库,代码如下:

<?php
        //连接数据库
        function conn(){
                $link=mysqli_connect('localhost','root','aa','php1',3306);
            mysqli_set_charset($link,'utf8');
            return true;
        }

        function open(){
                return conn();
        }

        function close(){
                return true;
        }

        function read($sess_id){
                global $link;
                $sql = "select sess_value from sess where sess_id='{$sess_id}'";
                $res=mysqli_query($link,$sql);
                if(mysqli_fetch_row($res)[0]){
                        return mysqli_fetch_row($res)[0];
                }
                return '';
        }

        function write($sess_id,$sess_value){
                global $link;
                $time=time();
                $sql="insert into sess values('{$sess_id}','{$sess_value}','{$time}')
                on duplicate key update sess_value='{$sess_value}',sess_time='{$time}'";
                return mysqli_query($link,$sql);
        }


        function delete($sess_id){
                global $link;
                $sql="delete from sess where sess_id='{$sess_id}'";
                return mysqli_query($link,$sql);
        }

        function gc($lifetime){
                global $link;
                $nowtime=time();
                $time=$nowtime-$lifetime;
                $sql="delete from sess where sess_time<'{$time}'";
                return mysqli_query($link,$sql);
        }

        session_set_save_handler('open','close','read','write','delete','gc');
        session_start();
        $_SESSION['name']="北京";
运行一切正常,可是一旦切换到高版本,例如7.2下,就会报错,Warning: session_start(): Failed to read session data: user (path: ) 或者是其他莫名的错,解决办法也很简单,只需要在read方法里面的return mysqli_fetch_row($res)[0],在返回之前做一下强制类型转换即可,即改成return (string)mysqli_fetch_row($res)[0];但是没强制转换之前也是字符串,为什么就不行呢?嘿嘿,你如果到传智来,我就告诉你。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2