Как исправить автоматическое создание сеанса при перезагрузке / обновлении страницы с использованием Codeigniter и базы данных в качестве драйвера сеанса? - PullRequest
0 голосов
/ 11 февраля 2019

Мой маленький проект отлично работает на моем локальном компьютере.Однако, когда я запускаю его на своем ноутбуке, запись автоматически загружается в мою таблицу ci_sessions при каждой перезагрузке или обновлении страницы.Я использую базу данных в качестве драйвера сеанса.

Here's an example of entries being auto-added after reloading my login page (row 1-3) and after successfully logging in (row 4-6)

На основе снимка экрана: строка 4 говорит, что мое хранилище сеансов входа успешно сохранено.Однако, добавление 2 дополнительных строк (5, 6) приводит к сбою этого кода:

public function isLoggedIn()
{

    if($this->session->userdata('logged_in') === true) {
        redirect('home', 'refresh');
    }
}

public function isNotLoggedIn()
{
    if($this->session->userdata('logged_in') !== true) {
        redirect('login', 'refresh');
    }
}

вот мой config.php

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

Вот мой Page Controller

<?php 

class Pages extends MY_Controller
{
    public function view($page = 'login')
    {
        if (!file_exists(APPPATH.'views/'.$page.'.php'))
        {
            // Whoops, we don't have a page for that!
            show_404();
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter

        if($page == 'login') {
            $this->isLoggedIn();
            $this->load->view($page, $data);
        } 
        else{
            $this->isNotLoggedIn();

            $this->load->view($page, $data);
        }
    }

}

MY_Controller Class

<?php 

class MY_Controller extends CI_Controller 
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library('session');
    }

    public function isLoggedIn()
    {

        if($this->session->userdata('logged_in') === true) {
            redirect('home', 'refresh');
        }
    }   

    public function isNotLoggedIn()
    {
        if($this->session->userdata('logged_in') !== true) {
           redirect('login', 'refresh');
        }
    }

}

До сих пор я уже пытался добавить приведенный ниже код в мой autoload.php, но безуспешно.

$autoload['libraries'] = array('database', 'session');

Примечание: снова этоработает в другом устройстве с аналогичной настройкой.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

после некоторого обхода, Codeigniter 3 еще не совместим с php 7. Я должен понизить версию php до 5.6, чтобы она заработала.спасибо всем за помощь.

0 голосов
/ 12 февраля 2019

У меня было много проблем с исходной библиотекой сеансов CI (включая то, что вы упомянули).Наконец я пришел к этой замене, которая использует native PHP session.Оно работает!Поверьте мне, в середине проекта я не переставал удивляться, почему.Просто работает.

Вот оно: Собственная сессия CodeIgniter

НО, из-за того, что это старая библиотека, которую вы ДОЛЖНЫ сделать несколько хаков.Вы можете проверить эти простые взломы на форуме библиотеки

Просто перетащите этот файл в каталог библиотеки codeigniter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...