2013-03-05 5 views
-1

У меня сеанс, и я использую базу данных для сеансов. Я использовал userdata в сеансе, чтобы сохранить имя пользователя и флаг «loggedin». Я автоматически загружал сессионную библиотеку, поэтому мне не пришлось явно загружать ее.Ожидаемое поведение сеанса CodeIgniter?

Я использовал его как в контроллере, так и для проверки «loggedin», а также для отображения имени пользователя, это вызывало загрузку CI_Session дважды и вызывало разрушение сеанса. Оба раза, когда CI_Session загружался, он пытался обновить сеанс и базу данных, первая удалась, а вторая отказала и уничтожила сеанс.

Я считаю, что я нарушал разделение между контроллером и представлением, и я решил проблему, только используя библиотеку сеансов в контроллере и передав переменные с именем пользователя в представление.

Но мой вопрос: Является ли анализ правильным? Я нарушал разделение между контроллером и представлением, и пока я этого не делаю, я должен быть в порядке, или это, возможно, повторится в другом сценарии?

Примечание: Я пытался тщательно задать этот вопрос, и я ищу технических ответов не мнения, я не хочу, чтобы это стало обсуждение этого против того, и т.д.

Добавление кода в просил:

Отрывок из контроллера admin.php

class Admin extends CI_Controller { 
    function __construct() { 
    parent::__construct(); 
    $this->load->model('users'); 
    $this->id = $this->session->userdata('id'); 
    $this->authorized = array('waccess' => $this->users->authorizedUser($this->id, 'waccess'), 
           'ceditor' => $this->users->authorizedUser($this->id, 'ceditor'), 
           'uadmin' => $this->users->authorizedUser($this->id, 'uadmin'), 
           'forms' => $this->users->authorizedUser($this->id, 'forms')); 

    } 
    public function index() { 
    log_message('debug', 'Admin->index'); 
    $this->load->view('framework', array(
     'head' => $this->load->view('head', array('title' => 'Administrator', 'stylesheet' => 'admin.css', 'javascript' => 'jquery-ui-1.8.16.custom.min.js'), true), 
     'header' => $this->load->view('headerAdmin', array('active' => 'Home', 'authorized' => $this->authorized), true), 
     'body' => $this->load->view('adminHome', '', true), 
     'midBody' => $this->load->view('blankMid', '', true), 
     'footer' => $this->load->view('footer', '', true) 
    )); 
    } 

Snippets из Посмотреть adminHome.php

<div id="main"> 
    <div class="content"> 
    <h1>Employee Interface</h1> 
<? if(!$this->session->userdata('loggedin')): ?> 
.... 
<? else: ?> 
    <p>Welcome <?=$this->session->userdata('fname')?> <?=$this->session->userdata('lname')?></p> 
<? endif; ?> 
    <p>Use the menu above to select the various employee and administrative options available to you</p> 
    </div> 
</div> 

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

DEBUG - 2013-03-04 19:54:31 --> Config Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Hooks Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Utf8 Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> UTF-8 Support Enabled 
DEBUG - 2013-03-04 19:54:31 --> URI Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Router Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Output Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Security Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Input Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Global POST and COOKIE data sanitized 
DEBUG - 2013-03-04 19:54:31 --> Language Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Loader Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Helper loaded: url_helper 
DEBUG - 2013-03-04 19:54:31 --> loading: session 
DEBUG - 2013-03-04 19:54:31 --> Session Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Helper loaded: string_helper 
DEBUG - 2013-03-04 19:54:31 --> Database Driver Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Session using database 
DEBUG - 2013-03-04 19:54:31 --> Session matching on [session_id]: b791b771c776ca4166a73424315d1110 
DEBUG - 2013-03-04 19:54:31 --> Session matching on [user_agent]: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22 
DEBUG - 2013-03-04 19:54:31 --> Session Updating 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [session_id] => b791b771c776ca4166a73424315d1110 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [ip_address] => 184.4.66.94 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [user_agent] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [last_activity] => 1362444838 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [user_data] => 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [id] => 15 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [fname] => Test 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [lname] => Test 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [email] => t 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [loggedin] => 1 
DEBUG - 2013-03-04 19:54:31 --> Session Update Completed 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [session_id] => 7875df72dc94ca7bd149debe69865a2e 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [ip_address] => 184.4.66.94 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [user_agent] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [last_activity] => 1362444871 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [user_data] => 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [id] => 15 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [fname] => Test 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [lname] => Test 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [email] => t 
DEBUG - 2013-03-04 19:54:31 --> Session Data: [loggedin] => 1 
DEBUG - 2013-03-04 19:54:31 --> Session routines successfully run 
DEBUG - 2013-03-04 19:54:31 --> Controller Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Model Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> loading: session 
DEBUG - 2013-03-04 19:54:31 --> Session Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Database Driver Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Session using database 
DEBUG - 2013-03-04 19:54:31 --> Session matching on [session_id]: b791b771c776ca4166a73424315d1110 
DEBUG - 2013-03-04 19:54:31 --> Session matching on [user_agent]: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22 
DEBUG - 2013-03-04 19:54:31 --> Session not found, destroying instance 
DEBUG - 2013-03-04 19:54:31 --> Session routines successfully run 
DEBUG - 2013-03-04 19:54:31 --> Controller Class Initialized 
DEBUG - 2013-03-04 19:54:31 --> Admin->index 
DEBUG - 2013-03-04 19:54:31 --> File loaded: application/views/head.php 
DEBUG - 2013-03-04 19:54:31 --> File loaded: application/views/headerAdmin.php 
DEBUG - 2013-03-04 19:54:31 --> File loaded: application/views/adminHome.php 
DEBUG - 2013-03-04 19:54:31 --> File loaded: application/views/blankMid.php 
DEBUG - 2013-03-04 19:54:31 --> File loaded: application/views/footer.php 
DEBUG - 2013-03-04 19:54:31 --> File loaded: application/views/framework.php 
DEBUG - 2013-03-04 19:54:31 --> Final output sent to browser 
DEBUG - 2013-03-04 19:54:31 --> Total execution time: 0.0793 
+1

Нет по-видимому, существуют и другие ошибки. Можете ли вы показать нам какой-то код? Как вы использовали методы сеанса tbe? Не должно быть проблем с использованием сеансовых вызовов как в контроллерах, так и в представлениях. – jtheman

+0

Я хотел бы добавить, что одна из главных причин, почему я задаю этот вопрос, состоит в том, что я не мог найти ответа на причину проблемы, когда я сначала началось его использование, и мне потребовалось много копаться в кодедигнитевом коде, чтобы выяснить, что я делаю неправильно. – TheDavidFactor

+0

@jtheman уверен, дайте мне несколько минут – TheDavidFactor

ответ

0

Попробуйте изменить настройку конфигурации:

$config['sess_match_useragent'] = FALSE; 

Я предполагаю, что у вас есть какой-либо код в вашем представлении или другой сценарий или плагин для браузера, который испортил проверку useragent. Это приводит к совпадению сеанса с несоответствием, что приводит к результату Session not found, destroying instance, как вы видите, что приводит к ошибкам.

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

Вы можете найти информацию в других постах ...

GOOGLECHROME кадр является причиной (по умолчанию части шаблона Bootstrap): Codeigniter sessions being destroyed in IE 10 when changing pages

расширение FirePHP является причиной: http://blog.tiger-workshop.com/firephp-firefox-extension-causing-codeigniter-session-lost/

+0

Это не похоже на проблему с useragent, он, по-видимому, более тесно связан с проблемой ajax, но без проблемы с файлом cookie: [здесь] (http://stackoverflow.com/questions/7980193/ codeigniter-session-bugging-out-with-ajax-calls) – TheDavidFactor

+0

Ну, вы показали или не сказали нам ничего о вызове AJAX внутри. Тогда проблема не в том, что линейная, как мне показалось сначала ... Хорошее начало получить помощь - это добавить все, что имеет отношение к вопросу. – jtheman

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