ychw0776 2017-08-22 03:46 采纳率: 0%
浏览 2572
已结题

PHP Session页面跳转值丢失

Session入库 页面跳转值丢失问题

我想在用户登录之后用session存储用户信息然后放到数据库中,
登录成功3秒后会跳转到另一个页面,但是SESSSION存储的值仅仅在数据库中
存放了这3秒,页面跳转过去之后Session的值就没了。
跳转过程中是这样的
图片说明
跳转过去就没了
图片说明

 <?php
class SessionLib{

    private $db;

    public function __construct(){
        ini_set('session.save_handler','user');

        session_set_save_handler(
            array($this,'open'),
            array($this,'close'),
            array($this,'read'),
            array($this,'write'),
            array($this,'destroy'),
            array($this,'gc')
        );

    }

    public function open(){
        $this->db = MysqlDB::getInstance($GLOBALS['config']['database']);
        echo '开启会话<br>';
    }

    public function close(){
        echo '关闭会话<br>';

    }

    public function read($session_id){
        $sql = "select session_value from session where session_id = $session_id";
        echo '读取会话<br>';
        return $this->db->fetchColum($sql);
    }

    public function write($session_id,$session_value){
        $time = time();
        $sql="insert into session values ('$session_id','$session_value',$time)
        on duplicate key update session_value='$session_value'";
        echo '写入会话<br>';
        return $this->db->query($sql);
    }

    public function destroy($session_id){
        $sql = "delete from session where session_id = $session_id";
        echo '删除会话<br>';
        return $this->db->query($sql);

    }

    public function gc($maxlifetime){
        $time =  time()- $maxlifetime ;
        $sql = "delete from session where session_time < $time";
        return $this->db->query($sql);

    }


}

 <?php
class Controller{

    public function __construct(){
        $this->initSession();
    }

    private function initSession(){
        new SessionLib();
        session_start();
    }

    public function success($url,$msg,$time=1){
        $this->jump($url,$msg,$time,true);
    }

    public function error($url,$msg,$time=2){
        $this->jump($url,$msg,$time,false);
    }


    private function jump($url,$msg,$time=3,$flag){
        if($msg == ''){
           header("location:{$url}");
        }else{
            if($flag){
                $img = '<img src="Public/Images/success.png">';
            }else{
                $img = '<img src="Public/Images/error.png">';
            }
        }
        echo <<<jump
        <!DOCTYPE html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <meta http-equiv="refresh" content="{$time};URL={$url}" />
            <style>
            div{
                margin-top: 100px;
                margin-left: 600px;
            }
            </style>
            <title>jump</title>
            </head>
            <body>
            <div>  {$img}    <p>{$msg}</p></div>
            </body>
            </html>
jump;
    }




}

 <?php
class UserLoginController extends Controller{

    public function LoginAction(){
        $model = new UserModel();
        if(isset($_POST['submit'])){
            $data['username'] = $_POST['username'];
            $data['password'] = $_POST['password'];
            $_SESSION['user'] = $data['username'].md5($data['password']);
            if($model->find($data)){
                $this->success('index.php?p=Home&&c=MainPage&&a=MainPage','登录成功');
                exit;
            }else{
                echo '登录失败';
            }
        }
        require __VIEW__.'UserLogin.html';
    }

}

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-08-22 16:28
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况