如何从数组索引创建$ _SESSION?

时间:2019-12-04 17:55:27

标签: php session

我正在执行登录系统,我想在验证用户身份时显示欢迎消息。我解释。

这是数据库:

enter image description here

用户登录时使用用户名,但我想在欢迎消息中显示其名字。

我拥有的功能是选择登录用户名的所有信息。

LoginManager.php

public function obtenirDades($usuari)
    {

        //Obtenim les dades de la base de dades
        $sql = " SELECT * FROM erp_user WHERE username = '$usuari'";


        $cons = (BdD::$connection)->prepare($sql);
        $ok = $cons->execute();
        $cons->setFetchMode(PDO::FETCH_ASSOC);
        $resultat = $cons->fetchAll();

        /*var_dump($resultat);
        die();*/

        return $resultat;

    }

然后在LoginController.php中,我获得$ _POST信息,调用该函数以显示数据库信息,并使用LDAP验证用户。

LoginController.php

<?php
if (!isset($_SESSION))
{
    session_start();
}

class LoginController extends Controller
{

    public function process($params)
    {
        //EN EL LOGIN VALIDEM L'USUARI I CONTRASENYA
        if (isset($_POST["login"])) {
            /*HERE WE INSTANTIATE LOGINMANAGER SO WE CAN USE IT'S FUNCTIONS*/
            $manager = new LoginManager();


            /*WE OBTAIN THE POST DATA*/
            $usuari = $_POST["usuari"];
            $password = $_POST["password"];


            //HERE WE USE THE FUNCTION TO OBTAIN INFORMATION FROM THE DATABASE
            $dds = $manager->obtenirDades($usuari); `WE`
            @$this->data["erp_users"] = $dds[0]["firstname"];


            if($manager->valida($usuari, $password)){

                //validació de ldap i redirecció si es professor o alumne
                if ($manager->valida($usuari, $password) && $dds[0]["type"] == "PROFESSORS") {


                    $_SESSION["username"] = $usuari;
                    var_dump($dds);
                    die();

                    header("Location: professor");


                } elseif ($manager->valida($usuari, $password) && $dds[0]["type"] == "ALUMNES") {

                    $_SESSION["username"] = $usuari;

                    header("Location: alumne");

                } else {

                    header("Location: login");

                }
            }else{
                echo "<div class='error'>USUARI i/o CONTRASENYA INCORRECTES! </div>";
            }



        }

        //Destrium la session
        if (isset($_POST['logout'])) {
            session_destroy();
            unset($_SESSION['username']);

            header('location:login');
        }

        $this->getLogin();
    }

    //Funció que ens retorna la vista de login
    public function getLogin()
    {
        $this->twig = "login.html";
    }

}

当我执行var_dumb($ dds)时,我得到了:

enter image description here

也在 ProfessorController.php 中,我必须通过$ _SESSION,以便可以在Professor.html中获得名字

<?php
if (!isset($_SESSION)) {

    session_start();

}


class ProfessorController extends Controller{

    public function process($params)
    {
        /*var_dump($params);
        die();*/

        if(empty($params[0])){

            /*echo $_SESSION["username"];*/

            $this->getProfessor();

        }elseif(isset($params[0]) && $params[0] == "crearNivell"){

            $this->twig = "crearNivell.html";
        }

    }

    public function getProfessor(){

        $this->twig = "professor.html";
    }

}

那么我该如何创建一个具有名字的$ _SESSION以便在我的视图中显示它?

2 个答案:

答案 0 :(得分:1)

您的会话数据包含用户名。您需要使用名字创建会话。函数obtenirDades()返回多行,因为您正在使用fetchAll()方法。由于它是一个登录函数,因此请使用fetch()方法,该方法将返回单个键/值数组。然后,要存储在会话中,请执行以下操作

 $_SESSION["firstname"] = $dds['firstname'];

答案 1 :(得分:0)

我找到了解决方法:

添加一个变量以存储所有数据:

$var = @$this->data["erp_users"] = $dds[0]["firstname"];

然后在会话中:

$_SESSION["username"] = $var;