Статистика руиздата

В пятницу на прошлой неделе в рамках поддержки сайта руиздат серьезно доработал сервис в части авторизации. К сожалению, баг с прерыванием сессий все равно остается до сих пор. Почему-то внезапно обрывается сессия. Хостер просит воспроизвести баг с их стороны, но как это сделать если я не могу даже со своей стороны его воспроизвести. Вроде сидишь-сидишь, сессия теплится и тут вдруг РАЗРЫВ, как говорил Антон Уральский. Но мы обязательно доработаем все, чтобы не было «НИ ЕДИНОГО РАЗРЫВА», главное вычислить из-за чего обрывается сессия.

Когда хочется что-то сделать новое, всегда возникает вопрос целесообразности и сложности. Если с первым всегда не было проблем, то со вторым становится с каждым днем сложнее и сложнее. Так как сайт требует постоянного развития, совершенствования и доработки, без этих моментов никуда, нужно работать над проектом постоянно и каждый день улучшать, иначе ничего не получится. Поэтому продолжаем работать-работать.


В пятницу сделал следующее:


1) Создал таблицу «whosonline» и туда помещаю всех, кто авторизовался, и в данный момент что-то делает на сайте. То есть ходит по разным страницам и что-то читает или пишет. Время скажем так виртуальной сессии, хотя на самом деле никакая это не сессия, составляет полчаса. То есть через полчаса скрипт автоматически удаляет тех, кто более получаса ничего не делал на сайте.

Прямо приведу код скрипта, для того кто хочет сделать нечто подобное на своих сайтах. Это все есть в современных CMS, но когда CMS пишешь сам данной функции там нет изначально.

Не могу сказать, что мой вариант какой-то образцовый, и на него нужно равняться, но он абсолютно рабочий и с простой логикой: создаются строки в таблице и после того как время последней активности отличается на 1800 секунд (полчаса) от текущего времени, строчка с автором благополучно удаляется. Что свидетельствует о том, что пользователь как бы ушел с сайта и уже не онлайн.

Код функции кто онлайн:

<? // FOR ONLINE SCHETCHIK

//echo "sid: $sid<br/>";
//echo "whostable: $whosonlinetable<br/><br/>";

$check = @mysql_query("SELECT autor, aid, lastseen FROM $whosonlinetable WHERE aid = '$sid'");

while ($checker=mysql_fetch_array($check)) {

	$aidlog=$checker["aid"];
	$autorlog=$checker["autor"];
	$seenlog=$checker["lastseen"];

//	echo "$aidlog $autorlog $seenlog <br/>";

}

// цикл на проверку всех кто залогинен и удалять тех у кого уже таймаут

$deletecheck = @mysql_query("SELECT aid, lastseen FROM $whosonlinetable");

while ($cikl=mysql_fetch_array($deletecheck)) {
	$delid = $cikl["aid"];
	$delseen = $cikl["lastseen"];

	$currtime = time();
//	echo "curr: $currtime<br/>";
	$lastact = strtotime($delseen);
	$raznica = $currtime - $lastact;
//	echo "last: $lastact<br/>";

//	echo "user: $delid $delseen<br/>";

	if ($raznica > 1800) {
		$delonline = @mysql_query("DELETE FROM $whosonlinetable WHERE aid = '$delid'"); 
	}

}

// цикл на проверку таймаута закончен

	if ($aidlog == $sid) {
	//	echo "ravno $aidlog and $sid";
		$online = @mysql_query("UPDATE $whosonlinetable SET autor='$slogin', aid='$sid', lastseen=now() WHERE aid = '$sid'");

			} else {

	//	echo "ne ravno $aidlog and $sid";
		$online = @mysql_query("INSERT INTO $whosonlinetable SET autor='$slogin', aid='$sid', lastseen=now()");
}	


//$foronline = @mysql_query("SELECT autor, aid, lastseen FROM $whosonlinetable");

// END FOR ONLINE SCHETCHIK

?>

2) Теперь у каждого автора есть дополнительный атрибут в базе «lastonline», где сохраняется время последней активности автора. Таким способом реализовал функцию, которая позволяет всем посетителям увидеть, когда какой-то конкретный посетитель был на сайте в последний раз. Очень удобно. Код приводить не вижу смысла, так как из предыдущего его можно легко вычленить.


3) Доработал вывод случайного произведения, таким образом, чтобы выводились еще и стихи. Раньше там выводилась только проза.

Алгоритм скрипта очень простой, он не учитывает какую-то суперлогику или фишки бородатых программеров, но суть в том, что он генерит два случайных числа, одно в диапазоне от 1 до 2, это значит выводить или прозу или стихи, а второе это случайный айдишник стиха или прозы. Иногда не выдает ничего, это так и задумано, чтобы часто не нагружало визуально.

Прозу выдает реже, стихи почаще, так и должно быть.


4) Провел некоторую доработку админ-панели сайта, всех секретов рассказывать не буду, но сейчас она стала намного функциональней, чем была раньше. Естественно, что у админпанели своя авторизация, никак не связанная с авторизацией авторов сайта и читателей.


Основные нововведения, которые добавил в рамках поддержки сайта руиздат, описал выше. До сих переживаю по поводу безопасности, так как абсолютной защиты никто гарантировать не может. Но был бы благодарен, тем кто разбирается в программировании и защите информации, если вы укажите мне на уязвимости или потенциально опасные места в сайте.

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

Добавить комментарий