Своя сессия в phpbb

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Своя сессия в phpbb

Сообщение vegaweb »

Здрасте.
Такая ситуация: на один из форумов нужно сделать вход по webmoney. То есть, при входе на конкретный форум идет проверка: если ли переменная

Код: Выделить всё

$_SESSION['WmLogin_WMID']
, если нет - отправляем юзера на сайт логинвебмани, он логинится, возвращается на наш сайт, идет проверка POST'a, пишется в $_SESSION['WmLogin_WMID'] значение, переданное нам вебманями, поддерживается сессия, при каждом апдейте страницы идет проверка существования $_SESSION['WmLogin_WMID'].

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

Код: Выделить всё

if ($f==71)
	{
	if (!empty($_POST['WmLogin_WMID']))
		{	session_start();
			$_SESSION['WmLogin_WMID']=$_POST['WmLogin_WMID'];
		}
	if (!isset($_SESSION['WmLogin_WMID']))
		{		
			header("location: https://login.wmtransfer.com/GateKeeper.aspx?RID=313645f3-6c64-4cdf-ba3a-a0080107bd23");
		}
			echo $_SESSION['WmLogin_WMID']; // первый раз выводит, потом - пусто
		
	}
Есть подозрение, что где то в коде движка есть что то типа session_end, хотя ничего такого, кроме случаев нажатия кнопки "выйти" не нашел.

Буду благодарен за помощь.

Добавлено спустя 1 минуту 17 секунд:
А да, еще: проверял на чистой странице (не phpbb) - все работает, сессия существует.
Бесполезно стучать в дверь, которой для других не существует
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Своя сессия в phpbb

Сообщение MIT »

phpBB вообще не использует систему сессий PHP, вместо неё используется гораздо более надёжная система сессий самого phpBB.
Все значения, связанные с сессией пользователя, должны хранится в таблице phpbb_sessions (заведи новое поле в ней), а не где попало.
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Своя сессия в phpbb

Сообщение vegaweb »

MIT, да, это здорово, но от чего может слетать моя сессия?
Бесполезно стучать в дверь, которой для других не существует
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Своя сессия в phpbb

Сообщение MIT »

Как вариант, из-за кривых настроек сервера.

Но вообще надо понимать, что сессия пользователя ВООБЩЕ никак не связана с сессией PHP.
Всё что их связывает — это теоретическая вероятность того, что две совершенно независимых системы (сессии PHP и phpBB) поссчитают один и тот же запрос знакомым себе.
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Своя сессия в phpbb

Сообщение vegaweb »

Да, я уже понял что они не связаны, однако имеем то, что имеем..
давайте забудем про сессии phpbb и остальное, чтобы не путаться)
просто попытаемся понять: почему слетает моя сессия?:)
Бесполезно стучать в дверь, которой для других не существует
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Своя сессия в phpbb

Сообщение MIT »

В рамках форума поддержки phpBB забыть о phpBB достаточно сложно.

По поводу твоей сессии могу сказать следующее:
1) Телепаты кончились
2) Без единой зацепки не работают даже телепаты
3) Причин может быть уйма, начиная от настроек PHP, прав доступа в операционной системе и заканчивая тем, что ты не правильно ими пользуешься
Отсюда следует ответ: хрен его знает. Ну ты понел ;)

Решение же твоей проблемы лежит на поверхности: добавить новое поле в таблицу сессий phpBB и не возиться с высшими силами, отвечающими за связь разных типов сессий. Благо, добавить новое поле, а, самое главное, пользоваться им, — довольно простое дело.
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Своя сессия в phpbb

Сообщение vegaweb »

MIT писал(а):довольно простое дело
м, ок, а как использовать его?
Бесполезно стучать в дверь, которой для других не существует
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Своя сессия в phpbb

Сообщение MIT »

Поле добавь через какой-нибудь phpMyAdmin.
Чтение значения производится через объект $user, например так:

Код: Выделить всё

$user->data['session_admin']
Запись значения — при использовании объекта$db:

Код: Выделить всё

$sql = 'UPDATE ' . SESSIONS_TABLE . '
	SET session_admin = 0
	WHERE session_id = \'' . $db->sql_escape($user->session_id) . '\'';
$db->sql_query($sql);
Но вот думается мне, что тебе вообще не к сессиям привязываться надо. Тебе эту информацию надо хранить именно для сессии, не для пользователя? Сессия же имеет срок действия...
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Своя сессия в phpbb

Сообщение vegaweb »

MIT писал(а):$user->data['session_admin']
то, что надо.
надо именно сессию, и сессию надо именно для юзера, почему именно сессия - потому, что надо проводить его как минимум по viewforum.php и viewtopic.php, соответственно, каждый раз надо чекать - есть/нету, можно было бы куки сделать, но, сам понимаешь, легко подправить :)
Бесполезно стучать в дверь, которой для других не существует
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Своя сессия в phpbb

Сообщение MIT »

Я к тому, что информацию можно хранить в пользователе, а можно в сессии пользователя.

Информация, сохранённая в пользователе, будет доступна всегда, пока ты её вручную не удалишь. Информация в сессии же, будет доступна только пока существует сессия, т.е. если человек зашёл с одного компьютера, и ты в его сессию что-то записал, то когда человек зайдёт под своим же именем с другого компьютера, этой информации доступно не будет, ведь сессия создастся другая.
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Своя сессия в phpbb

Сообщение vegaweb »

MIT, да, нужна именно сессия, т.е. - ушел - свободен, ждем следующего входа.
вылазит ошибка:

Код: Выделить всё

Fatal error: Call to undefined function sql_escape() 
хотя прописал вначале функции

Код: Выделить всё

global $db;
Добавлено спустя 1 минуту 47 секунд:
еще вопрос: как быть с неавторизованными пользователями? для них сессия не создается?

Добавлено спустя 2 минуты 34 секунды:
перенес ниже - пропала ошибка.
Бесполезно стучать в дверь, которой для других не существует
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Своя сессия в phpbb

Сообщение MIT »

Скорее всего ты производишь вызов функции $db->sql_escape() до подключения основного форумного функционала (файла common.php), а значит до создания объекта $db. Либо ты вызываешь её не как составляющю объекта ($db->sql_escape()), а напрямую (sql_escape()), хотя надо наоборот.
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Своя сессия в phpbb

Сообщение vegaweb »

Смотри, $db->sql_escape($user->session_id) выводит пустоту..
я уже правильно вставил код.

Добавлено спустя 3 минуты 5 секунд:
аа, разобрался, сделал глобальной $user)

Добавлено спустя 9 минут 47 секунд:
почему то нету записи в phpbb_sessions с id сессии, которая вылазит в $user->session_id

Добавлено спустя 16 минут 38 секунд:
Вобщем, не получается так.. вход не работает, когда есть дополнительное поле в графе сессий. видимо не совпадает количество колонок в запросе во время входа.
Логинюсь -> получаю сообщение об успешном логине -> переход на главную -> логина нет.
Бесполезно стучать в дверь, которой для других не существует
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Своя сессия в phpbb

Сообщение MIT »

Что и как делал? Давай код.
Аватара пользователя
vegaweb
phpBB 1.4.4
Сообщения: 150
Стаж: 18 лет 1 месяц
Откуда: Харьков
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Своя сессия в phpbb

Сообщение vegaweb »

да с кодом все ок

Код: Выделить всё

function wmlogincheck($f)
{
	global $db,$user;
	if ($f==71)
	{ 
	if (!empty($_POST['WmLogin_WMID']))
		{	
	$sql = 'UPDATE ' . SESSIONS_TABLE . '
	SET WmLogin_WMID = '.str_replace("\'", "''", addslashes($_POST['WmLogin_WMID'])) .'
	WHERE session_id = \'' . 
	str_replace("\'", "''", addslashes($user->session_id)) . '\'';
	$db->sql_query($sql);
	
		}
	if (($user->data['WmLogin_WMID']==0))
		{		
			header("location: https://login.wmtransfer.com/GateKeeper.aspx?RID=72f6794e-5d96-47cf-9e43-a008018adf89");
		}

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

Вернуться в «Поддержка phpBB 3.0.х»