Forum Webscript.Ru
Программирование => PHP => Тема начата: Rodent от 17 Марта 2005, 00:40:59
-
Привет всем.
У меня вот такая проблема. Написал, не без помощи советов данного форума, себе счетчик присутсвия людей на сайте в данную минуту.
$sid=session_id();
$time=time();
$past=time()-500;
if (isset($_SESSION["username"])) $person=$_SESSION["username"];
else $person=0;
mysql_query("DELETE FROM we_online WHERE last_time < \'$past\'");
$result=mysql_query("SELECT last_time FROM we_online WHERE sess_id=\'$sid\'");
$rows=mysql_num_rows($result);
if ($rows!="0"):
mysql_query("UPDATE we_online SET last_time=\'$time\' WHERE sess_id=\'$sid\'");
else:
mysql_query("INSERT INTO we_online (last_time,sess_id,ip,page,person) VALUES (\'$time\',\'$sid\',\'$REMOTE_ADDR\',\'$PHP_SELF\',\'$person\')");
endif;
mysql_query("OPTIMIZE TABLE we_online");
$online=mysql_query("select * from we_online order by person");
$guest=0;
echo \'
Сейчас на сайте: \'.mysql_num_rows($online).\' чел.
\';
for ($i=1; $i<=mysql_num_rows($online); $i++):
$o=mysql_fetch_array($online);
if ($o["person"]!=\'0\'):
echo $o["person"];
if (mysql_num_rows($online)!=1):
if (mysql_num_rows($online)!=$i) echo ", ";
endif;
else:
$guest=$guest+1;
endif;
endfor;
echo \'
Гости: \'.$guest.\' чел.\';
?>
Проблема в том, что если заходит зарегинный пользователь, и открывает несколь страниц (IE 6.0), то у него каждый раз почему-то новый индефикатор сессии, поэтому и новая запись в бд. С гостями тоже самое.
Как мне от этого избавиться?
-
А нафига ж ты проверяешь зарегистрированного по сессии?
-
А чем отличается зарегинный от незарегинного по факту присутствия?
Мне ведь надо знать кто сейчас на сайте в данную минуту. А не зарегин он или нет.
Да и вопрос был на другую тему.
В чем моя ошибка?
-
в логике
-
чувак задаёт вопрос.
Проблема в том, что если заходит зарегинный пользователь, и открывает несколь страниц (IE 6.0), то у него каждый раз почему-то новый индефикатор сессии
чуваку на вопрос отвечают.
Чувака ответ не устраивает.
Чувак хочет все и сразу.
Нет проблем.
Не нравится хотя бы частичное решение задачи - ищи другое.
чудик
-
Rodent:
чем отличается зарегинный от незарегинного по факту присутствия?
тем, что ты его можешь однозначно идентифицировать
-
http://webuilder.info/modules.php?name=Articles&pa=showarticle&articles_id=30
может поможет
-
О блин, и здесь сессии.
прямо без сессий шагу ступить нельзя
-
RomikChef
я за все время пребывания на этом форуме от тебя ничего путного не услышал... одна критика... может может дашь совет или скажешь где ошибка в моем коде, или как сделать лучше?
если по данным вопросам у тебя ответа нет, то просьба свою желчь оставлять на других ветках форума.
Хотя нет лучше для себя сам создай тему и там ораторствуй.
-
ferryman
У меня похожий код только с бд
-
Rodent:
может дашь совет
а это что?RomikChef:
нафига ж ты проверяешь зарегистрированного по сессии?
тебе непонятно, что я имел в виду? переспросиRodent:
если по данным вопросам у тебя ответа нет
дурилка картонная.
Это для тебя - ВОПРОС
а для людей, у которых на плечах голова, а не табуретка - это детская задачка.
не позорься, считая, что твои проблемы вызывают хоть какое-то затруднение.
И не надо думать, что я не кормлю тебя с ложечки потому, что сам не знаю. Я просто хочу, чтобы ты сам хоть немного задумывался над своими проблемами.
И все. завязывай с оффтопиком.
Мне уже начали надоедать профессора кислых щей, которые берутся оценивать полезность моих ответов.
Оценивают они при этом только своё скудоумие.
Если у тебя есть вопросы - задай из без беллетристики.
сопли же размазывать про то, что тебе никто не помогает - поищи другое место.
-
Rodent:
ничего путного не услышал... одна критика
кстати, некоторые люди считают критику весьма путной вещью.
и говорят за неё спасибо.
Если же для тебя "путное" - это комплиеннты, то купи себе проситутку и она тебе за твои деньги будет выполнять все, что ты хочешь.
А здесь, на общедоступном форкме, я буду говорить то, что сочну нужным, даже если это не нравится твоей персоне и оскорбляет твое раздутое самолюбие
-
дак а как все-таки без сессий? куками что-ли?
-
ip
-
RomikChef
Ваша желчь тут прожигает все вокруг, ступить не куда, везде смердящие плевки.
Интересно, у тебя дети то есть? Ты их также поливаешь грязью перед тем как что-то путное сказать? Бедные...
Был поставлен вопрос, почему происходит данная ситуация с просьбой объяснить или указать на ошибку. И что же я получаю в ответ:
А нафига ж ты проверяешь зарегистрированного по сессии?
Мдя... ответил... спасибо ОГРОМНОЕ...
А про ip а что делать с dial-up. Запись храниться в бд 5 мин. Возможно ведь такая ситуация, что пользователь вылетел. а потом опять зашел, но под другим ip соотвественно, получается 1 пользователь две записи. но одно НО... она будет храниться всего 5 мин. хотя может и не стоит тогда так заморачиваться.
Но у меня до сих пор остался вопрос, почему когда пользователь открывает новую страничку того же сайта, образуется новая сессия???
-
Rodent
Но у меня до сих пор остался вопрос, почему когда пользователь открывает новую страничку того же сайта, образуется новая сессия???
потому что это правильно. для каждого окна свой идентификатор.
Вообще Ромик прав, поломать голову над проблемой всегда полезно.
Не надо сильно заморачиваться. количество людей на сайте лучше считать по ip, если тебе этого не достаточно можешь конечно применять все в комплексе, ip,сессию, куки, только сначала надо подумать стоит ли оно того, ведь так ты увеличишь нагрузку, усложнишь скрипт, если это не главная задача твоего скрипта то не заморачивайся, а вот зарегистрированных пользователей немного по другому надо вести. можешь конечно пользоваться сессией для записи пользователя, тоьлко не надо ей доверять сильно, если видишь что пользоваль такой уже есть на сайте и на него 2 сессии, то делай выводы, оставляй только последнюю запись о нем.
Решения могут быть разные, одно хуже, другое лучше, или же в одной ситуации нужно применить одно, в другой другое, главное пробовать. ошибки они потом сами всплывут, из скрипта к скрипту опыт будет увеличиваться, мастерство тоже. будешь видеть свои ошибки в прошлом. это неизбежно, но без этого и не научиться программировать.
-
Invader
Браво.
Весьма редкий случай на этом форуме, когда человек пишет столь разумно.
Rodent:
Был поставлен вопрос, почему происходит данная ситуация с просьбой объяснить или указать на ошибку. И что же я получаю в ответ:
А нафига ж ты проверяешь зарегистрированного по сессии?
Мдя... ответил... спасибо ОГРОМНОЕ...
Насклько я понял, смысл моего ответа до тебя не дошёл.
Видимо, это и послужило причиной столь бурных эмоций - разыгравшийся комплекс неполноценности.
А всего-то надо было написать: "извини - не понял, что ты имел в виду".
Я бы пояснил. Очевидно, что для учета зарегистрированных пользователей надо использовать не ид сессии, а ид юзера.
и все проблемы тут же решатся. с зарегистрированными хотя бы.
Никогда не понимал людей, которые отказываются от решения 50% проблем только потому, что это не сто. Не нравится - не используй. я тебя не заставляю.
И это всё при том, что сама проблема высосана из пальца.
Господи, какая вселенская проблема - сколько пользователей на сайте. Если сейчас на сайте 8, а показывает 9 - вебмастеру надо идти и стреляться.
И это всё при том, что цифра ИЗНАЧАЛЬНО примерная. По определению. На одного, открывшего два окна придется трое, которые открыли этот фуфельный сайт и тут же ушли, а записи о них будут висеть ещё 5 минут.
И вот на этой заведомо нерешаемой задаче столько соплей размазывается.
Короче, надоели мне твои стоны.
Научишься общаться, не верещать по каждому пустяку - приходи снова.
-
Invader
Огромное спасибо за подробнейшее объяснение. Некоторые на это не способны (яркий например RomikChef).
У меня просто было неправильное восприятие самой специфики сессии, я почему то был уверен что если сессия запущена, то она передает след окну или странице свой id будь то с помощью куки или адреса url, видимо я был не прав. Но тогда вопрос: если для каждого окна новая сессия, как между этими окнами происходит обмен переменными которые были в предыдущей сессии? по какому параметру сервер/браузер понимают что эти переменные именно той сессии которая была раньше и именно этого пользователя а не другого?
RomikChef
По поводу скудоумия и неполноценности, я с тобой спорить не буду, все равно ничего не поймешь...Я не знаю в каких кругах общества или даже обществ ты общаешься, но в нормальном обществе непринято отвечать вопросом на вопрос. Это конечно не считается верхом невоспитанности, но общую картину воспитания и культурности данного человека немного искажает.
Возможно сайт и фуфельный (интересно откуда ты таких слов набрался, вроде как мужичок 40 лет, а не может грамотно изложить свою мысль) но мой... и творю на нем все что моей душе угодно, и если возникают проблемы и недопониманию простых/сложных вещей, пытаюсь естественно сам все выяснить, а потом уже и сюда постить.
И я не постился бы здесь по данному вопросу если, как ты выразился, цифра примерная не скакала в переделах ++15-20 пользователей в большую сторону.
PS И если тебя так раздражают мои "сопли" и "пустяки" по которым я сюда обращаюсь, то сделай милость, не постись и не отвечай на мое "нытье". Сэкономишь время и нервы как свои так и мои.
-
видал я идиотов, но такого - в первый раз.
ты ещё к доктору приди за помощью, а когда он начнет спрашивать, что у тебя болит и чем ты лечился заяви ему, что он некультурно поступает.