Использование Isset с собственными сессиями в CodeIgniter - PullRequest
5 голосов
/ 05 июня 2011

Я читал о том, как 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 с хранилищем на стороне сервера и т. Д.?Мне бы очень хотелось чувствовать себя максимально безопасным, когда речь заходит о сессиях, независимо от того, означает ли это, что мне придется писать более длинный код.

Ответы [ 7 ]

2 голосов
/ 08 сентября 2011

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

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

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

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

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

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

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

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

1 голос
/ 30 ноября 2012
$logindata = $this->session->userdata('username');

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

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

1 голос
/ 22 ноября 2012
$data=$this->session->userdata("session variable");

if($data)
{
  // do something
}

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

1 голос
/ 05 июня 2011

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

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

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

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

0 голосов
/ 08 ноября 2012

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

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

0 голосов
/ 10 августа 2011

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

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

$this->session->userdata("keyHere");  // returns false if not set
0 голосов
/ 17 июня 2011

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

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

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

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

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

...