Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вопрос по isset / 4 сообщений из 4, страница 1 из 1
24.06.2014, 11:21
    #38678232
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по isset
Есть у меня PHP-страница с таким кодом:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
		// Имеется ли активная сессия с данным логином?
		$session = $this->db->query('session_list', [':user' => $login['SERVICE_LOGIN']], 'ID');
		// Если есть активные сессии, то завершить их
		if (isset($session))
		{
			if (empty($params['force']))
			{
				$this->state['error'] = ['code'=>"OK_CONFIRM", 'detail'=>$session];
				return;
			}
			foreach ($session as $id=>$row)
			{
				$this->db->query('session_stop', ['sid'=>$row['SESSION_ID']]);
				$this->uf->sta_cmd($row['MAC'], "unauthorize");
				$this->uf->sta_cmd($row['MAC'], "reconnect");
			}
		}


Смысл этого фрагмента:
1. Ищем, есть ли активные сессии под данным логином.
2. Если они есть и задан параметр force, то сбрасываем сессии.
3. Если активные сессии есть и параметр force не задан, то показываем пользователю соответствующее уведомление с предложением продолжить авторизацию или отказаться.

Запрос session_list выглядит примерно так:
Код: sql
1.
2.
3.
4.
5.
select ...
from `SESSIONS` S
where CURRENT_TIMESTAMP() between S.`SESSION_START` and ifnull(S.`SESSION_STOP`,S.`SESSION_EXPIRED`)
  and S.`USERNAME` = :user
order by S.`SESSION_START` desc



Здесь SESSION_START это дата создания сессии, SESSION_EXPIRED это дата истечения сессии, а SESSION_STOP это дата досрочного завершения сессии (если задана).
Метод $this->db->query возвращает null в случае каких-либо ошибок и array в случае успешного выполнения запроса (если SQL-запрос не возвращает данных, возвращается пустой array).

Как может возникнуть ситуация, что пользователь видит страницу подтверждения авторизации при том, что соответствующий SQL-запрос (текст SQL-запроса логгируется) возвращает пустой набор данных?
То есть $session = array(), но if (isset($session)) срабатывает.


________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
24.06.2014, 13:27
    #38678456
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по isset
...
Рейтинг: 0 / 0
24.06.2014, 13:43
    #38678482
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по isset
Alibek B.,

думаю ты ищешь empty :)
...
Рейтинг: 0 / 0
24.06.2014, 15:11
    #38678587
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по isset
Да, невнимательно читал документацию.
Поменял на !empty.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вопрос по isset / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]