Переменная SESSION сбрасывается при перенаправлении () в Codeigniter php - PullRequest
0 голосов
/ 10 октября 2019

Я сталкиваюсь со странной проблемой сброса переменной сеанса при перенаправлении действия.

Я использую Codeigniter и перенаправляю на действие панели мониторинга после входа в систему. Я получаю данные в действии входа после проверки учетных данных с помощью БД, нокогда я использую redirect () для перенаправления на панель инструментов, переменные сеанса исчезают.

Admin.php

<?php class admin extends CI_Controller 
{
    function login()
    {
        $login = $this->Admin_model->login($this->input->post()); // <-- verify data and set to session
        if($login)
        {
            $this->session->set_flashdata("success","Logged in Successfully");
            var_dump($_SESSION); // <-- able to fetch data from session
            // exit();
            redirect("admin/dashboard");
        }
        else
        {
            $this->session->set_flashdata("error","Invalid Credentials!! Please Try Again!!");
            redirect("admin");
        }
    }

    function dashboard()
    {
        var_dump($_SESSION); // <-- session data is vanished and not able to get userdata('id')
        exit();
        if($this->session->userdata('id') != '')
        {
            $data['active_tab'] = "dashboard";
        }
        else
        {
            redirect("admin");
        }
    }
?>

Admin_model.php

<?php Class Admin_Model extends CI_Model
{
    function login($data)
    {
        $user = $this->db->get_where("users",array("username" => $data['username'],
                                     "password" => md5($data['password']),
                                     "is_active" => "1")
                                    )->row_array(); 
        if(!empty($user))
        {
            $this->set_user_session($user);
            return true;
        }
        else
        {
            return false;
        }
    }

    function set_user_session($login)
    {
        $arr = array();
        $arr["id"] = $login["id"];
        $arr["username"] = $login["username"];
        $this->session->set_userdata($arr);
    }
?>

Пробовал это в xampp и wamp, все браузеры, но проблема остается прежней, любая помощь будет благодарна.

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

С какой версией CodeIgniter вы работаете? Вы можете попробовать следующие шаги:

  1. Перейдите в system / library / Session / Session.php
  2. Комментарий session_start(), добавив //. Мы хотим переместить sessionn_start ().
  3. Найти (using ctrl + f) комментарий, который говорит Security is king. Закомментируйте всю строку под этим комментарием до конца функции. В моем случае я закомментировал строку с номерами 315 - 320.
  4. в строке с номером 282 измените эту строку ini_set('session.name', $params['cookie_name']); на ini_set('session.id', $params['cookie_name']);
  5. закомментируйте следующие строки

    line 108 //session_set_save_handler($class, TRUE); line 290-296 // session_set_cookie_params( // $params['cookie_lifetime'], // $params['cookie_path'], // $params['cookie_domain'], // $params['cookie_secure'], // TRUE // HttpOnly; Yes, this is intentional and not configurable for security reasons // ); line 305 //ini_set('session.gc_maxlifetime', $expiration);

  6. Перейдите к основному index.php, это первый index.php, расположенный в том же каталоге с подкаталогами 'application', 'system', 'user_guideи т. д.
  7. Поставьте session_start() сразу после < ?php

Надеюсь, это поможет вам ....

0 голосов
/ 10 октября 2019

Вы должны использовать this->session->set_userdata() для настройки сеанса. this->session-> set_ flashdata() используется для установки флеш-сообщений, которые удаляются после следующего действия.

...