Двойной пост. Форум читал.

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Аватара пользователя
Samuelson
phpBB 1.4.0
Сообщения: 31
Стаж: 19 лет 3 месяца

Двойной пост. Форум читал.

Сообщение Samuelson »

Такое дело... Поставил на форум мод - защиту от двойного поста... Т.к. у одного пользователя он постоянно проскакивал. Ну я подумал, ручки дёргаюца - два раза нажимает... Но не тут-то было. После установки мода - ни у кого проблем нет (я даже пытался нажимать на затемнённую кнопку "отправляется" - никак!), а у того же юзера - иногда проскакиваю двойные посты! Не понимаю....
Мод от Xpert'а

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

############################################################## 
## MOD Title: Post Is Sending 
## MOD Author: Xpert < xpert@phpbbguru.net > (N/A) http://www.phpbbguru.net 
## MOD Author: R@ < meos@mail.ru > (Kirill) http://osdev.ru 
## MOD Description: This mod changes post submit button text  from "Submit" to "Sending" on posting to ensure user 
## that his message is being send. And adds protection from double post 
## MOD Version: 1.1.2
Извините, только что нашёл тему именно по этому моду - переместите туда пост, если надо.
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 20 лет 1 месяц

Сообщение quazi »

Samuelson писал(а):ни у кого проблем нет ... а у того же юзера - иногда ...
javascript у этого пользователя отключены
Аватара пользователя
Samuelson
phpBB 1.4.0
Сообщения: 31
Стаж: 19 лет 3 месяца

Сообщение Samuelson »

ммм, т.е. это от провайдера зависит? Он всегда говорит - 100% нажимаю один раз... как-то странно.
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 20 лет 1 месяц

Сообщение quazi »

Samuelson
блин, да причем тут провайдер.
МОД использует вставки на javascript - как защиту от двойного поста. если отключить javascript можно отправлять один и тот же пост многократно

Добавлено спустя 1 минуту 54 секунды:

защиту от двойного поста надо ставить на сервере
например, проверять md5-хэши постов = 100%-защита

Добавлено спустя 4 секунды:

защиту от двойного поста надо ставить на сервере
например, проверять md5-хэши постов = 100%-защита

Добавлено спустя 3 секунды:

защиту от двойного поста надо ставить на сервере
например, проверять md5-хэши постов = 100%-защита

Добавлено спустя 2 минуты 8 секунд:

как видите я отправил трижды одно и то же сообщение. при этом я не отключал javascript.

лучшее решение от двойного поста - непосредственный редирект на отправленное сообщение. решение есть на этом форуме - ищите - написано мной
Аватара пользователя
Samuelson
phpBB 1.4.0
Сообщения: 31
Стаж: 19 лет 3 месяца

Сообщение Samuelson »

Т.е. чё делать-то?? У хостера спрашивать? Мод править?
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 20 лет 1 месяц

Сообщение quazi »

Samuelson
я же Вам ответил!
Вы читать умеете?
Аватара пользователя
Samuelson
phpBB 1.4.0
Сообщения: 31
Стаж: 19 лет 3 месяца

Сообщение Samuelson »

назначение: данный мод автоматически перенаправляет пользователя на страницу к сообщению после его добавления/редактирования и к предыдущему сообщению после удаления текущего
Можешь показать пример форума с этим модом? Я чёт не совсем понял как происходит данный процесс...

Добавлено спустя 1 час 54 минуты 46 секунд:

Подскажите, пожалуйста! Что можно сделать? Как включить юзеру javascript? Или нужно Ваш мод ставить? Можно ли поверх мода Xpert'а ставить?

Добавлено спустя 1 час 25 минут 20 секунд:

Вот ещё симптом: Когда этот юзер не залогинился, т.е. под "гостём" находится на форуме - захожу в админку - написано Гость - его айпи.... И написано это ДВА раза! Ну две одинаковые строки... И айпи какой-то странный.. 81.9.хх.х (если надо с цифрами напишу....) но какой-то коротенький он :?: :?:
Аватара пользователя
Samuelson
phpBB 1.4.0
Сообщения: 31
Стаж: 19 лет 3 месяца

Сообщение Samuelson »

Парни, подскажите хотя бы из-за чего может происходить такое.. Мне кажется в этом корень проблемы.Пользователь заходит под определённым айпи, а в админке показано, что два одинаковых пользователя находится... (я своими глазами видел, два гостя с одним айпи. А внизу форума написано "гостей: 1")
Такое может быть?
MAzZY
Бывший член :)
Сообщения: 2925
Стаж: 19 лет 11 месяцев
Благодарил (а): 19 раз
Поблагодарили: 30 раз
Забанен: Бессрочно

Сообщение MAzZY »

Ну так ты проверь, чей это ип. 100% - бот поисковый
Аватара пользователя
Samuelson
phpBB 1.4.0
Сообщения: 31
Стаж: 19 лет 3 месяца

Сообщение Samuelson »

Не.
1) я этого юзера знаю. 100% не бот
2) в админке смотрю: юзер залогинился + гость с его (юзера) ip!
alex_t2
phpBB 1.0.0
Сообщения: 1
Стаж: 18 лет 1 месяц

Сообщение alex_t2 »

Наших модераторов порядком подзамучило удалять вторые посты. Чаще всего подобное возникает при отправке сообщения из под МиниОперы, или при проблемах с соединением. Защита методом отключения кнопки "Отправить" в данном случае неэффективна, т.к. Мини Опера Яваскрипты не обрабатывает, а при проблеме соединения пользователь делает шаг назад и снова отправляет. В итоге частенько возникали двойные посты. Флуд-интервал у меня поставлен минимальный по просьбам пользователей - модемщиков, использующих тактику "Подключился, закачал интересующие темы, отключился, спокойно написал ответы, подключился, отправил все подряд." Пришлось немного перелопатить фунцию флуд-контроля. Вместо

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

		//
		// Flood control
		//
		$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
		$sql = "SELECT MAX(post_time) AS last_post_time
			FROM " . POSTS_TABLE . "
			WHERE $where_sql";
		if ($result = $db->sql_query($sql))
		{
			if ($row = $db->sql_fetchrow($result))
			{
				if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
				{
					message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
				}
			}
		}
в файле functions_post.php поставил

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

		//
		// Flood control
		//
		$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
		$sql = "SELECT p.post_time AS last_post_time, p.post_id, pt.post_text
			FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
			WHERE $where_sql AND pt.post_id = p.post_id ORDER BY post_time DESC LIMIT 1";
		if ($result = $db->sql_query($sql))
		{
			if ($row = $db->sql_fetchrow($result))
			{
				if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
				{
					message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
				}
				if ($row['post_text']==$post_message)
				{
					message_die(GENERAL_MESSAGE, $lang['Double_post_Error']);
				}
			}
		}
Естественно добавив константу в языковой файл.
Проблемы нет.

Добавлено спустя 8 секунд:

Наших модераторов порядком подзамучило удалять вторые посты. Чаще всего подобное возникает при отправке сообщения из под МиниОперы, или при проблемах с соединением. Защита методом отключения кнопки "Отправить" в данном случае неэффективна, т.к. Мини Опера Яваскрипты не обрабатывает, а при проблеме соединения пользователь делает шаг назад и снова отправляет. В итоге частенько возникали двойные посты. Флуд-интервал у меня поставлен минимальный по просьбам пользователей - модемщиков, использующих тактику "Подключился, закачал интересующие темы, отключился, спокойно написал ответы, подключился, отправил все подряд." Пришлось немного перелопатить фунцию флуд-контроля. Вместо

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

		//
		// Flood control
		//
		$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
		$sql = "SELECT MAX(post_time) AS last_post_time
			FROM " . POSTS_TABLE . "
			WHERE $where_sql";
		if ($result = $db->sql_query($sql))
		{
			if ($row = $db->sql_fetchrow($result))
			{
				if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
				{
					message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
				}
			}
		}
в файле functions_post.php поставил

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

		//
		// Flood control
		//
		$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
		$sql = "SELECT p.post_time AS last_post_time, p.post_id, pt.post_text
			FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
			WHERE $where_sql AND pt.post_id = p.post_id ORDER BY post_time DESC LIMIT 1";
		if ($result = $db->sql_query($sql))
		{
			if ($row = $db->sql_fetchrow($result))
			{
				if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
				{
					message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
				}
				if ($row['post_text']==$post_message)
				{
					message_die(GENERAL_MESSAGE, $lang['Double_post_Error']);
				}
			}
		}
Естественно добавив константу в языковой файл.
Проблемы нет.

Добавлено спустя 2 минуты 4 секунды:

У Вас, как видите тоже возникает двоение. Это была иллюстрация к теме.

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