|
|
|
| Выкладывал я этот вопрос на одном форуме, существеной помощи не
получил, может здесь подскажут..... всё это для чата.....
И ещё вопрос: можно ли убить сессию если знать её идентификатор? | |
|
|
|
|
|
|
|
для: method
(07.06.2005 в 18:23)
| | > И ещё вопрос: можно ли убить сессию если знать её идентификатор?
Сессия "убиваеться" на машине клиента т.е. session_destroy() будет уничтожать ту сессию которая была последней открыта на машине клиента.
Теперь шаги.
1) Бд в которой храниться ip, индитификатор сессии и время последнего посещения.
2) Создаем скрипт , который регистрирует всез пришедших. Если ip пришедшего юзера уже есть в бд, то обновляем его время пребывания. Если нет , то вносим его в бд.
3) Пишем скрипт , который будет запускаться (cron'ом или по другому) и удалять тех пользователей чье время прибывании на сайте меньше установленного (~ 15 мин.)
Хочу отметить, что например для WAP это не актуально ;) Там работаем не через ip, а через session_id.
Удачи. | |
|
|
|
|
|
|
|
для: Akira
(07.06.2005 в 18:42)
| | Хочу заметить, что куки для wap вообще не актаульны, т.к пропускаются оператором в заисимости от настроения. | |
|
|
|
|
|
|
|
|
для: cheops
(07.06.2005 в 21:20)
| | Всем большое спасибо,для разгона вполне достаточно....Lol
cron = только что прочитал программа на UNIX'ах ...........
как сделать что нить наподобие средствами PHP, чтоб скрипт сам запускался в течение определённого времени, не взависимости запрашивает страницу со скриптом юзер или нет, и удалял юзеров из активных по времени...???
ЗЫ: администратору или модераторам: в теме Функция MD5 , как дешифровать? удалите плиз мои большие мессаги со скриптами, я уже редактировал,больше не редактируется.......
к посту прикрепляю оч хороший скрипт....... =)
[поправлено модератором. скрипт удален, т.к. не имеет отношения к обсуждаемой теме]
| |
|
|
|
|
|
|
|
для: method
(08.06.2005 в 03:16)
| | >ак сделать что нить наподобие средствами PHP, чтоб скрипт сам запускался в течение определённого времени, не взависимости запрашивает страницу со скриптом юзер или нет, и удалял юзеров из активных по времени...???
Можно привязать скрипт к какой-нибудь не шибко посещаемой странице. Тогда при заходе посетителей на эту страницу будет проводиться чистка не активных пользователей.
Иначе, только cron. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(08.06.2005 в 04:30)
| | Как убить сессию по её Идентификатору?
если id сессии: 2488180aa03fe81372eb01a8489b5109
то что нужно написать чтоб заансетилась
сессия еменно с этим id?
ЗЫ: в электронной литературе которой я располагаю
ни чего даже похожего нет, потому ни каких эксперементов
не делал, сразу на форум =) | |
|
|
|
|
|
|
|
для: method
(09.06.2005 в 11:03)
| | Для уничтожения сессии испльзуется функция session_destroy(), которая должна вызываться в файле, прошитом сессией с данным id.
<?php
// Устанавливаем идентификатор сессии
session_name("2488180aa03fe81372eb01a8489b5109");
// Инициируем сессию
session_start();
// Уничтожаем сессию
session_destroy();
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.06.2005 в 12:16)
| | 2 cheops:
список онлайн юзеров у меня в чате работает примерно так:
юзер логинится и в файл online.php записывается login|server_time|id сессии.
есть невидимый фрейм который обновляет online.php а именно server_time каждые 10 сек,
невидимый фрейм который удаляет юзеров из онлайн списка по прошествию некоторого времени с момента последнего обращения пользователя к странице : он удаляет юзера из файла online.php и пишет
в чат что он покидает чат(timeout),
в этом же скрипте типо того что вы мне советовали:
session_name("id сессии юзера ");
session_destroy(); ...........
так вот, если закрыть страницу чата, и по прошествии того определенного времени в
строке адресов броузера набрать chat.php то юзер войдёт , сессия не уничтожилась,
и он может общаться со всеми,тока бот уже сообщил что тот покинул чат,
в добавок ко всему его нет в списке онлайн-юзеров........
Как быть? | |
|
|
|
|
|
|
|
для: method
(17.06.2005 в 14:39)
| | Это в порядке рассуждения:
я бы завел для пользователя поле chatroom, куда бы заносил id текущей комнаты чата, где находится пользователь. Если робот написал что пользователь вышел, то этому полю присваивается значение 0 (так же робот может сообщать в какую комнату перешел пользователь). Соответственно, пользователь с chatroom==0 не может постить в чат, пока статус его chatroom не изменится. А уж его изменение, как мне кажется, отследить несложно. | |
|
|
|
|
|
|
|
для: Loki
(17.06.2005 в 15:05)
| | Вот функция чисто на файлах, возвращает число OnLine пользователей. Файл самоочищается при истечении лимита времени и по IP.
function online($name)
{
$file = 'online.txt';
$filearray = @file($file);
foreach ($filearray as $i)
{
$k++;
list($names,$ips,$times) = explode('||',$i);
if ($times<time()-60)
{
$k = $k-1;
array_splice($filearray,$k,1);
}
if ($ips == $_SERVER['REMOTE_ADDR'])
{
$k = $k-1;
array_splice($filearray,$k,1);
}
}
// Добавляем себя
$user = $name.'||'.$_SERVER['REMOTE_ADDR'].'||'.time();
$filearray[count($filearray)] = $user;
$fp = @fopen($file,'w');
foreach ($filearray as $i)
{
$i = trim($i);
@fputs($fp,$i."\r\n");
}
@fclose($fp);
return count($filearray);
}
|
В итоге в online.txt файле оседает инфа в таком формате:
ИмяЮзера||127.0.0.4||1119007100
|
| |
|
|
|
|
|
|
|
для: PHPFan
(17.06.2005 в 15:20)
| | хм... тогда надо добавлять номер комнаты и время выхода. Чтобы удалять пользователей с chatroom==0 и временем выхода больше времени жизни сессии, а до тех пор их просто не показывать онлайн. | |
|
|
|
|
|
|
|
для: method
(17.06.2005 в 14:39)
| | А как же он заходит в чат, если он удалён из контрольного списка... если пользователя нет в списке - ему хочешь не хочешь потребуется снова авторизоваться в online.php? Как только бот сообщает, что пользователь покинул чат - следует удалить его из файла, а при обращении к страницам чата смотреть имеется он в файле или нет - если нет, доробо пожаловать на авторизацию login.php - тогда все проблемы сами собой решатся... | |
|
|
|
|
|
|
|
для: cheops
(17.06.2005 в 20:44)
| | сессия жива!!(при закрытии страницы, а не самого браузера).....
можно ли как нить убить сессию по её id из скрипта на самом сервере
при том факте что сервер не мой , а допустим на хостинге бесплатном место нарыл.... =) | |
|
|
|
|
|
|
|
для: method
(17.06.2005 в 22:05)
| | Если она сама сдыхать не хочет и удалить её штатными средствами не удаётся, то придётся с этим мириться. | |
|
|
|
|
|
|
|
для: cheops
(17.06.2005 в 22:09)
| | не будем =)....
в этой теме есть ответ на мой вопрос,
ну нам ведь надо всё покароче покампактней и
головой не думать много =)
всем спасибо | |
|
|
|
|
|
|
|
для: method
(18.06.2005 в 01:24)
| | Блин, написал скриптик онлайн пользователей для чата,
и как оказалось он некорректный =(,
подскажите где у меня ошибка.....
при логине если такой юзер есть в БД
проверяется не перезагрузился ли он(окно закрыл или ещё чё учюдил),
или вошёл как новый......
если в одном брозе(когда в чате один пользователь) всё нормально,
когда запускаю в двух трёх брозах начинается чёрти чё,
тот который ребут записывает в файл онлайн себя,
а все остальные стираются ,или всех стирает и ещё пишет себя к
себе записаному в одну строку......=(
<?php
$fp = file ($on_lines);//файл куда заносятся онлайн пользователи
for ($i = 0; $i < count($fp); $i++){
$newfp = explode("|", $fp[$i]);
if (($login == $newfp[0]) && (($server_time - $newfp[1]) < $period)){//если такой юзер есть в онлайн-листе и время отмеченое там не оффлайн
$reb=true;
$log_reb = fopen($mes, "a");
fputs($log_reb, "\n$server_time|$say_all|$bot||в чат влетает $login(reboot)|3px|#FFFFFF");//запись в чат что юзер вошел
fclose($log_reb);
$newfp[1]=$server_time;
$newfp[2]=$id_s;
$newfp[3]=$status;
$count = implode("|",$newfp);
}
if($reb){
unset($newfp);
$buffer .= $count;}
}
if($reb){
$fr = fopen($on_lines,"w");
fputs($fr,$buffer);
fclose($fr);}
clearstatcache();//думал дело как то связано с кешем....и ob_clean(); пробовал....
?>
и foreach делал:
<?php
$users_r = file($on_lines);
foreach($users_r as $line){
$user_r = explode("|", $line);
if(($login == $user_r[0]) && (($server_time - $user_r[1]) < $period)){
$reb=true;
$log_reb = fopen($mes, "a");
fputs($log_reb, "\n$server_time|$say_all|$bot||в чат влетает $login(reboot)|3px|#FFFFFF");
fclose($log_reb);
$user_r[1]=$server_time;
$user_r[2]=$id_s;
$user_r[3]=$status;
$line = implode("|",$user_r);
}
if($reb){
unset($user_r);
$buffer .= $line;}
}
if($reb){
$fr = fopen($on_lines,"w");
fputs($fr,$buffer);
fclose($fr);}
clearstatcache();
if(!$reb){$r_us = fopen($on_lines, "a");//если юзера не было в списке онлайн
fputs($r_us, "\n$login|$server_time|$id_s|$status");
fclose($r_us);
$us_log = fopen($mes, "a");
fputs($us_log, "\n$server_time|$say_all|$bot||в чат влетает $login|3px|#FFFFFF");
fclose($us_log);}
Header("location:chat.php");
?>
|
файл онлайн-пользователей
ник|time()|id сессии|статус:
moder|1119836243|b9858f47d071b7213f9f49afabf7c582|moderator
guest|1119836243|b9858f47d071b7213f9f49afabf7c582|user
|
сначала грешил на IE(6.0.3790.0) и оперу(8.0), установил nescape(7.0) и myie(2 rus) , всё то же....=( | |
|
|
|
|
|
|
|
для: method
(27.06.2005 в 06:11)
| | У меня чего-то туго идёт с пониманием работы... а время пользователя в файле онлайн-пользователей обновляется при перезагрузки им странцы? | |
|
|
|
|
|
|
|
для: cheops
(27.06.2005 в 12:19)
| | вот код невидимого фрейма который обновляет время онлайн (каждые 10 сек)
<?php
include("conf.php");
session_start();
//session_set_cookie_params(time()+40);
$login=$_SESSION['login'];
$users = file($on_lines);
foreach($users as $line){
$user = explode("|", $line);
if(($user[0]==$login)&&(($server_time - $user[1]) < $period)){
$user[1]=$server_time;
$line = implode("|",$user);
}
unset($user);
$buffer .= $line;
}
$fd = fopen($on_lines,"w");
fputs($fd,$buffer);
fclose($fd);
?>
|
| |
|
|
|
|
|
|
|
для: method
(27.06.2005 в 13:06)
| | х3 чё делать =(
хоть как скрипт стирает всех в файле онлайн,
и записывает того кто заходит.......
я уже пробовал и циклы делать каждый
на определенную проверку,
ну никак пока чегото... | |
|
|
|
|
|
|
|
для: method
(28.06.2005 в 06:39)
| | Посмотрите структуру файла - она не меняется? Т.е. не исчезают ли переводы строк или ещё что-то в этом духе при обновлении? | |
|
|
|
|
|
|
|
для: cheops
(28.06.2005 в 11:07)
| | да есть немного, когда кто нить по тайм-ауту вылетает
в файле остаются пустые строки...
пробовал
<?php
if($line=""){unset ($line);}
?>
|
чё то не то вышло, ваще ни какого эффекта | |
|
|
|
|
|
|
|
для: method
(28.06.2005 в 18:04)
| | А так срабатывает?
<?php
if($line="\n"){unset ($line);}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(28.06.2005 в 22:04)
| | Спасибо cheops , сделал вот так:
if($line!="\n"){
читаем строку в массив
}
|
пока вроде нормально,ща начну по новой
писать скрипт на проверку ребута,
а то не чё не выходило затёр к чертям =) | |
|
|
|
|
|
|
|
для: method
(29.06.2005 в 07:28)
| | вопрос может быть и глупый, но я его задам =) :
какое максимальное число символов в строке? сколько их нужно прежде чем
указатель автоматом перейдёт на другую строку?или это фантастика =) lol | |
|
|
|
|
|
|
|
для: method
(29.06.2005 в 11:42)
| | Перехода на другую строку не будет никогда, пока вы не укажете его явно при помощи специального символа \n (для UNIX) или \r\n (для Windows).
<?php
$text = "Первая строка\r\nВторая строка";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(29.06.2005 в 12:20)
| | в общем всё кул... =)
блин не знаю чё бы без вас делал,
наверно всё бы ещё с формой регистрации мучался =) | |
|
|
|