2013-12-10 2 views
1

Прежде всего я новичок в кодеригенере. Все, что я хочу спросить, это то, почему каждое обновление моих данных сеанса теряется. Я перенаправляю логин.codeigniter сеанс потерян при обновлении (F5)

Вот мой код.

контроллер Войти

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Login extends CI_Controller { 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function index() 
    { 
     $this->load->helper('form'); 
     $this->load->view('login'); 
    } 

} 

?> 

verifylogin

function index() { 
    //This method will have the credentials validation 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); 

    if($this->form_validation->run() == FALSE) { 
    //Field validation failed. User redirected to login page 
    //$this->load->view('headerx'); 
    //redirect('login', 'refresh'); 
    $this->load->view('login'); 
    } 
    else { 
    //Go to private area 
    redirect('home'); 
    } 

} 

function check_database($password) { 
    //Field validation succeeded. Validate against database 
    $username = $this->input->post('username'); 

    //query the database 
    $result = $this->user->login($username, $password); 

    if($result) { 
    $sess_array = array(); 
    foreach($result as $row) { 
     $sess_array = array(
     'id' => $row->id, 
     'username' => $row->username 
    ); 
     $this->session->set_userdata('logged_in', $sess_array); 
    } 
    return TRUE; 
    } 
    else { 
    $this->form_validation->set_message('check_database', 'Invalid username or password'); 
    return false; 
    } 
} 
?> 

домашний контроллер

function index() 
{ 
    if($this->session->userdata('logged_in')) { 
    $session_data = $this->session->userdata('logged_in'); 
    $data['username'] = $session_data['username']; 
    $this->load->view('home', $data); 
    } 
    else { 
    //If no session, redirect to login page 
    // print_r($this->session->all_userdata()); 
    //die(); 
    redirect('login'); 
    } 
} 

первого входа в систему это успех, но когда я обновить (f5) он возвращается к форме входа. мое мнение, потому что сессия потеряна. спасибо за любую помощь ...

EDIT И РЕШИТЬ:

извините за неудобство, это проблема, потому что произойдет

<script> 
    function goOut(){ 
     <?php $this->session->unset_userdata('logged_in');?> 
     window.location="<?php echo base_url()?>";  
    } 
</script> 

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

+0

Почему, по вашему мнению, сеанс потерян? Вы проверили, что он потерян? – zerkms

+0

Да, я уже проверял с помощью print_r ($ this-> session-> userdata ('logged_in')); в верхней части условия. сначала появляется, но когда я обновляюсь, это пусто – reefman

+0

Не могли бы вы также опубликовать свой файл конфигурации? – thatonefreeman

ответ

1

Вместо этого я попытался бы использовать сеансы CodeIgniter в базе данных. У меня были проблемы с CI в прошлом с такой проблемой. Обычно это происходит, когда вы устанавливаете большой объем данных (больше 4 КБ) в файле cookie.

Дайте мне знать, если сеансы на базе базы данных не являются вариантом.

Смотрите здесь для получения дополнительной информации: CodeIgniter Sessions См заголовка «Сохранение данных сессии в базу данных»

+1

Согласен, сеансы БД - это путь, который стоит – Zarathuztra

+0

, но я хочу знать, почему он не работает хорошо. – reefman

+0

Возможно, возникла проблема с повторяющимися сеансами. Ваш предыдущий сеанс не может быть уничтожен должным образом и вызывает конфликт при попытке возобновить текущий сеанс. Эта проблема возникает и в других браузерах? – thatonefreeman

0

Если вы на окнах есть проблема с Codeigniter, PHP 7 и Apache на Windows, 10. У меня был клиент которые хотели, чтобы приложение для создания на своем собственном ноутбуке, и это произошло только на новом ноутбуке.

Итак, после часов тестирования мы удалили XAMPP 7.1.4 и переустановили XAMPP с версией 5.6.XX. И это исправило это. Тем не менее, на ящиках Linux не было проблем с Nginx и PHP 7. Просто Windows 10.

В любом случае, я надеюсь, что это поможет! Мне потребовалось несколько часов, чтобы найти решение.

Смежные вопросы