Использование Isset с собственными сеансами в CodeIgniter

Я читал о том, как CI обрабатывает сеансы иначе, чем собственные сеансы, и чувствую себя немного небезопасно при хранении всех данных в cookie (?), В отличие от собственного сеанса PHP, который хранит только идентификатор сеанса (?). Поэтому я решил использовать собственные сеансы без библиотеки CI native_session.

Теперь я знаю, что класс ввода в CI проверяет Isset с помощью следующего утверждения true / false:

if ($this->input->post('something'))

что приводит к невозможности работы функции Isset (выдает ошибку). Однако я бы хотел проверить свои собственные сеансы с помощью функции Isset, как я могу это сделать? я пробовал

if (isset($_SESSION['keyHere']))

что дает мне ошибку.

Итак, чтобы подвести итог: я хочу использовать Isset в своем массиве сеансов, поскольку я чувствую, что использую

if ($_SESSION['keyHere'])

без Isset может быть «опасно / глупо».

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


person Millenille    schedule 04.06.2011    source источник


Ответы (7)


Итак, давайте поговорим о проблеме, с которой вы столкнулись с isset! Я согласен со всеми ответами, пустая функция - это хорошая попытка, тоже с использованием array_key_exists, но у isset есть свое собственное место на языке php.

Сначала вы не публиковали сообщение об ошибке, но, как сказал @GolezTrol, у вас, вероятно, проблемы с session_start ().

Его нужно разместить вверху страницы перед любыми скриптами. Я бы поместил этот код перед всеми скриптами, и лучше всего разместить его внутри страницы config / config.php, в ее начале или, возможно, в корневом index.php

Используя его, вы запустите сеанс на всех страницах вашей системы. Ну, по поводу вашего второго вопроса.

Я думаю, что сеанс, родной из PHP, действительно безопасен, но сеанс Codeigniter тоже действительно хорош.

У Codeigniter есть некоторые проблемы с безопасностью, когда мы говорим о файлах cookie, если мы обрабатываем важные данные системы, с ним сложно работать, особенно если кто-то другой может его редактировать, думая обо всем, что я описываю выше, i можно сказать, что у Codeigniter хорошая библиотека сеансов, даже если мы работаем с важными данными.

Если вы не верите в безопасность файлов cookie, просто установите базу данных, и у вас возникнут проблемы с ней. Хорошо, что это способность и возможность работать с этим классом во всех частях системы!

На самом деле я использую способ базы данных, и я предлагаю это.

person Wallysson Nunes    schedule 08.09.2011

Я бы использовал array_key_exists вместо isset. isset также проверяет, не является ли значение значением NULL, поэтому массив с существующим ключом, но значением NULL все равно вернет false. Вы знаете, что это массив, и хотите проверить, существует ли ключ, поэтому имеет смысл использовать array_key_exists.

Но проблема не в этом. : D

Я думаю, тебе сначала нужно позвонить session_start().

Собственная обработка сеансов PHP работает нормально, пока вы находитесь на одном веб-сервере.

person GolezTrol    schedule 04.06.2011

$data=$this->session->userdata("session variable");

if($data)
{
  // do something
}

используйте это в своих файлах кода CI. у меня работает все время!

person atiqmumtaz2006    schedule 22.11.2012

$logindata = $this->session->userdata('username');

if ($logindata !== FALSE)
{
  //it exists
}

может помочь!

person foxybagga    schedule 30.11.2012

Я всегда использовал функцию php empty();, хотя она работает иначе, если вы не не знаю, что ты делаешь.

  • Если это пустой массив, он вернет ЛОЖЬ
  • Если он NULL, он вернет FALSE

У меня лично были небольшие проблемы с новым классом сеанса в CI 2.0.2. Создайте таблицу с именем "sessions" и сохраните сеансы в базе данных, используя sess_use_database в значение true. Также установите для sess_encrypt_cookies значение true и, наконец, если вы хотите, чтобы сеансы совпадали с IP-адресами пользователей, используйте sess_match_ip. Да, и не забудьте установить ключ шифрования, который сделает его еще более безопасным.

Сеансы PHP - это хорошо, но лично мне больше нравятся сеансы CI, потому что они дают больше гибкости. Особенно, когда вы запускаете несколько веб-головок с балансировщиком нагрузки.

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

person tpae    schedule 16.06.2011

Почему бы не использовать встроенный класс сеанса CodeIgniter? он обеспечит ту же функциональность, что и класс ввода, чтобы не заставлять вас использовать isset().

Он позволяет использовать зашифрованные сеансы и использует собственную реализацию сеанса.

$this->session->userdata("keyHere");  // returns false if not set
person jondavidjohn    schedule 09.08.2011

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

Затем, когда вы получаете доступ к информации о сеансе, он действует как обычные методы ввода, поэтому вы можете просто использовать if ($ this-> session-> userdata ('name')), а не использовать isset или empty или что-то еще.

person bjohnb    schedule 08.11.2012