Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ WEB Разработка ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

FreeBSD and Nix

Общая

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Codeigniter: session


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

Примечание: Даже если вы не используете шифрованные сессии, вы должны установить ключ шифрования в вашем конфигурационном файле, который будет использоваться для предотвращения манипуляций с данными сессий.

Инициализация сессий
Для инициализации класса сессий вручную в конструкторе контроллера, используйте функцию $this->load->library:

$this->load->library('session');

Загруженный объект библиотеки сессий доступен к использованию как $this->session

Что такое данные сессии?
Сессии в CodeIgniter это просто массив, содержащий следующую информацию:
Уникальный идентификатор сессии пользователя (Session ID, статистически случайная строка с очень высокой энтропией, хешированной в MD5 для портативности, и перегенерируемая по умолчанию каждые 5 минут); 
IP-адрес пользователя; 
User Agent пользователя (первые 120 символов браузерной строки); 
Время последней активности (unix timestamp). 
Указанные выше данные сохраняются в куки в виде сериализованного массива, в соответствии с этим прототипом:

[array]
(
'session_id' => random hash,
'ip_address' => 'string - user IP address',
'user_agent' => 'string - user agent data',
'last_activity' => timestamp
)

Получение данных сессии
Любой кусок информации из массива сессии возможно получить посредством следующей функции:

$this->session->userdata('item');

Где item это индекс массива, соответствующий элементу, который вы хотите получить. Например, для того, чтобы взять идентификатор сессии, сделайте следующее:

$session_id = $this->session->userdata('session_id');

Примечание: Эта фунция возвращает FALSE, если запрошенный элемент не существует.

Добавление пользовательских данных
Полезный аспект массива сессий заключается в том, что вы можете добавлять ваши собственные данные в него, и они будут сохраняться в пользовательской куке. Зачем это вам? Вот пример:

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

Чтобы добавить ваши данные в массив сессии, передайте этой функции массив, содержащий ваши новые данные:

$this->session->set_userdata($array);

Где $array это ассоциативный массив, содержащий ваши новые данные. Вот пример:

$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);

$this->session->set_userdata($newdata);

Если вы хотите добавлять данные пользователя по одному значению за раз, set_userdate() также поддерживает и этот синтаксис. 

$this->session->set_userdata('some_name', 'some_value');

Получение всех данных из сессии
Массив со всеми данными сессии может быть получен следующим образом:

$this->session->all_userdata()

Эта функция возвращает ассоциативный массив, вроде следующего:

Array ( [session_id] => 4a5a5dca22728fb0a84364eeb405b601 [ip_address] => 127.0.0.1 [user_agent] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; [last_activity] => 1303142623 ) 

Удаление данных сессии
Также, как set_userdata() может использоваться для добавления информации в сесиию, unset_userdata() может использоваться для удаления, передачей ключа сессии. Например, если вы хотите удалить 'some_name' из данных сессии: 

$this->session->unset_userdata('some_name');

Эта функция также принимает ассоциативный массив элементов, которые нужно удалить.

$array_items = array('username' => '', 'email' => '');

$this->session->unset_userdata($array_items);

Удаление сессии 
Чтобы очистить текущую сессию: 

$this->session->sess_destroy();

Пример:

Контроллер:
<?php
class Blog extends CI_Controller {
     
    function index()
    {
        //Получаем значение поля name
        $data['name'] = $this->session->userdata('name');
        
        //Если еще не вводили, вылезет форма
        if(empty($data['name']))
        {
            //Сама форма
          $this->load->view('login');
          
          //Если нажали кнопку
          if($this->input->post('LogIN'))
          {
            $in = array(
                   'name'  => $this->input->post('name'),
                   'logged_in' => TRUE
            );
            
            //Устанавливаем данные сессии
            $this->session->set_userdata($in);
            redirect('blog');
          }  
        }
        else
        {
            //Вошедшему пользователю
            $name = $data['name'];
            echo "                
                <html>
                <head>
                <title></title>
                </head>
                <body>
                <p>Name is: $name</p>
                <a href='blog/logout'>Exit</a>
                </body>
                </html>
            ";
        }
        
    }
    
    //Разлогинимся
    function logout()
    {
        $this->session->unset_userdata('name');
        redirect('blog');
    }
    
    
}    

Вид login.php:
<html>
<head>
<title></title>
</head>

<body>
<form method="post" action="<?=base_url();?>index.php/blog">
name:<br /> <input type="text" name="name" /><br />
pass:<br /> <input type="password" name="pass" /><br />
<input type="submit" name="LogIN" value="LogIN" />
</form>
</body>
</html>

Проверяем http://site/index.php/blog


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект