Пытаюсь занести каждую сессию в базу
во всех браузерах все работает
в Opera при отгрузке страницы тоже все работает но при нажатиина f5 почемуто в базу пишется еще какойто ID сессии и так происходит при кажлм нажатии на F5
вот код
if(empty($_SESSION['auth'])){
$ip = $_SERVER['REMOTE_ADDR'];
$id_session = session_id();
$_SESSION['auth'] = 'guest';
$_SESSION['login'] = 'Гость';
mysql_query("INSERT INTO `". FWE_PRIF ."session` (id_session, auth, login, date_start, date_stop, ip) VALUES('". $id_session ."', '". $_SESSION['auth'] ."', '". $_SESSION['login'] ."', NOW(), NOW(), '". $ip ."')", DB_ENGINE);
}
Во всех остольных браузерах все работает нормально
а вот в опере если у меня ID сесии = 1a053b644be82a67b609ee2052e099e2
то при отгрузке страницы если сессия ужезаведена
в базу поподают еще какието данные с ID
f23b4859e6bda8bf8df0b2cd5f90999d
ade2ecddb93b31807e3c795bcca45015
442ba0c2ed11c21f60378bf8aeaa02f1
Вообщем ерунда какаято
Спустя 14 минут, 46 секунд (11.12.2010 - 15:14) Lenarfate написал(а):
сразу после инсерта делай редирект на эту же страницу
Спустя 27 минут, 46 секунд (11.12.2010 - 15:41) Remka написал(а):
А как его сделать?
Я пишу
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
непомогает=(
Я пишу
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
непомогает=(
Спустя 2 минуты, 48 секунд (11.12.2010 - 15:44) DySprozin написал(а):
Remka
а если так?
header('location: .");
а если так?
header('location: .");
Спустя 8 минут, 7 секунд (11.12.2010 - 15:52) Remka написал(а):
Warning: Cannot modify header information - headers already sent by (output started at E:\vhosts\default\httpdocs\sessin.php:20) in E:\vhosts\default\httpdocs\sessin.php on line 39
39 строка header('location: .');
39 строка header('location: .');
Спустя 6 минут, 19 секунд (11.12.2010 - 15:59) Remka написал(а):
а может быть из за того что у меня что то на подобии чпу сделанно?
и вообщем это все задается перед файлом который сессии загружает
и ссылка вот такого вида http://domail.ru/ru/modul/script/id
$GET = array();
while ($A_config = mysql_fetch_array($Q_config)){
$cfg_name = $A_config['cfg_name'];
$cfg_value = $A_config['cfg_value'];
$GET[$cfg_name] = $cfg_value;
}
if (!empty($_GET['rewrite'])){
$param = explode('/', trim($_GET['rewrite'], '/'));
$i = '0';
foreach ($GET as $var => $val){
if (!empty($param[$i])){
$GET[$var] = $param[$i];
++$i;
}
}
}
elseif (count($_GET)){
foreach ($GET as $var => $val){
if (!empty($_GET[$var])){
$GET[$var] = $_GET[$var];
}
}
}
while ($A_config = mysql_fetch_array($Q_config)){
$cfg_name = $A_config['cfg_name'];
$cfg_name = !empty($_GET[$cfg_name])?$_GET[$cfg_name]:NULL;
}
и вообщем это все задается перед файлом который сессии загружает
и ссылка вот такого вида http://domail.ru/ru/modul/script/id
Спустя 55 секунд (11.12.2010 - 16:00) DySprozin написал(а):
Remka
header должен стоять в самом начале файла. По крайней мере, _до_ первого вывода _любой_ информации (даже пробела) (;
header должен стоять в самом начале файла. По крайней мере, _до_ первого вывода _любой_ информации (даже пробела) (;
Спустя 9 минут, 12 секунд (11.12.2010 - 16:09) Remka написал(а):
Я не понимаю почему вот эта строка срабатывает тогда когда она вообще не должна работать
mysql_query("INSERT INTO `". FWE_PRIF ."session` (id_session, auth, login, date_start, date_stop, ip) VALUES('". $id_session ."', '". $_SESSION['auth'] ."', '". $_SESSION['login'] ."', NOW(), NOW(), '". $ip ."')", DB_ENGINE);
и в переменную $id_session ставит какуюто хрень
mysql_query("INSERT INTO `". FWE_PRIF ."session` (id_session, auth, login, date_start, date_stop, ip) VALUES('". $id_session ."', '". $_SESSION['auth'] ."', '". $_SESSION['login'] ."', NOW(), NOW(), '". $ip ."')", DB_ENGINE);
и в переменную $id_session ставит какуюто хрень
Спустя 1 час, 3 минуты, 23 секунды (11.12.2010 - 17:12) inpost написал(а):
Remka
Редирект до вывода данных на экран! Любых...
Редирект до вывода данных на экран! Любых...
Спустя 4 часа, 50 минут, 46 секунд (11.12.2010 - 22:03) Remka написал(а):
Неработает=(((
Opera отвечает
"Объект перемещен
Документ теперь находится здесь"
Остальные браузеры не могут отоброзить страницу
Opera отвечает
"Объект перемещен
Документ теперь находится здесь"
Остальные браузеры не могут отоброзить страницу
Спустя 5 минут, 25 секунд (11.12.2010 - 22:08) inpost написал(а):
А можно узнать, зачем тебе id сессии?
Спустя 8 минут, 27 секунд (11.12.2010 - 22:17) Remka написал(а):
Мне нужно каждого "пользователя", "Гостя" записывать в базу время когда он пришел и время когда он последний раз был активен.
Есть еще другие способы это сделать?
Я кроме как сессия больше незнаю.
Есть еще другие способы это сделать?
Я кроме как сессия больше незнаю.
Спустя 6 минут, 55 секунд (11.12.2010 - 22:24) inpost написал(а):
А каким образом ты следишь за Гостями? И зачем это делать с гостями?
А ты следи не за session_id, а за $_SESSION['name'], а туда рандомное число даёшь, будет такой же эфект, что и id сессии
А ты следи не за session_id, а за $_SESSION['name'], а туда рандомное число даёшь, будет такой же эфект, что и id сессии
Спустя 1 минута, 15 секунд (11.12.2010 - 22:25) Remka написал(а):
А редирект надо будет делать?
Спустя 9 минут, 28 секунд (11.12.2010 - 22:34) inpost написал(а):
А ты попробуй, вроде не нужен...
Спустя 54 секунды (11.12.2010 - 22:35) Remka написал(а):
Всеравно
Сделаю сессию $_SESSION['name'];
туда загрузил рандомное значение
и после чего перезагружаю
и он пишет другое рандомное значение в базу
хотя то которое занесено в сессию осталась тамже
Сделаю сессию $_SESSION['name'];
туда загрузил рандомное значение
и после чего перезагружаю
и он пишет другое рандомное значение в базу
хотя то которое занесено в сессию осталась тамже
Спустя 1 минута, 17 секунд (11.12.2010 - 22:37) inpost написал(а):
if(empty($_SESSION['name']))
$_SESSION['name'] = rand();
В другом месте мы уже пользуемся созданным, не переписываем, не заменяем!
Спустя 4 минуты, 5 секунд (11.12.2010 - 22:41) Remka написал(а):
if (empty($_SESSION['NAME'])){
$_SESSION['NAME'] = $РАНДОМНОЕ ЗНАЧЕНИЕ;
}
else{
Заносим в базу
}
Все же просто
откуда он берет эти рандомы?
Спустя 46 секунд (11.12.2010 - 22:41) inpost написал(а):
Что именно ты в БД заносишЬ? Покажи инсерт
Спустя 50 секунд (11.12.2010 - 22:42) Remka написал(а):
mysql_query("INSERT INTO `". PRIF ."session` (id_session, auth, login, date_start, date_stop, ip) VALUES('". $name_session ."', '". $_SESSION['auth'] ."', '". $_SESSION['login'] ."', NOW(), NOW(), '". $ip ."')", DB_ENGINE);
Спустя 4 минуты, 38 секунд (11.12.2010 - 22:47) Remka написал(а):
Просто вообще эта опирация у меня самая первая перед ней только ЧПУ
и вывода на экран еще пока никакого
Как я думаю это сделать
1. если зашли первый раз то записываем имя сесии и пишем его в базу
2. если зашли и имя сесии присутствует то обновляем время
3. если в базе есть сесии у которых с момента последней активности прошо больше 20 минут заносим их в базу ЛОГ и удаляем.
Все проще простого
делаю но не работает=(((((
и вывода на экран еще пока никакого
Как я думаю это сделать
1. если зашли первый раз то записываем имя сесии и пишем его в базу
2. если зашли и имя сесии присутствует то обновляем время
3. если в базе есть сесии у которых с момента последней активности прошо больше 20 минут заносим их в базу ЛОГ и удаляем.
Все проще простого
делаю но не работает=(((((
Спустя 2 часа, 48 минут, 44 секунды (12.12.2010 - 01:36) Remka написал(а):
Сделал сам!
Может кому будет полезно!
Выкладываю что получилось все работает без редиректа.
Если где дырок наделал поделитесь решением.
или может что не учел
Может кому будет полезно!
Выкладываю что получилось все работает без редиректа.
Если где дырок наделал поделитесь решением.
или может что не учел
$user_ip=$_SERVER['REMOTE_ADDR'];
$if_session =mysql_query("SELECT * FROM `session` WHERE `ip` = '". $user_ip ."'");
if(mysql_num_rows($if_session) == '0'){ # Смотрим наличие IP в базе если есть то
$chars = '1234567890'; # Ставим символы из которых будем генерировать номер сессии
$max = '25'; # Ставим длинну номера сесии
$charset= 'sha1'; # Ставим кодировку в которой будем шифровать номер
$size = StrLen($chars)-1; # Пишем длинну строки
$skey = null; # Создаем переменную и записываем туда пустое значение
while($max--){ # Проворачиваем цикл
$skey.=$chars[rand('0' , $size)]; # Получаем рандомные данные
$part=substr($skey, '0', 25); # Записываем полученные данные в переменную
}
$skey=$part; # присваиваем переменную полученному рандомному результату
$sesion_id=$charset($skey); # зашифровываем данные
session_name('ИМЯ СЕССИИ'); # выставляем имя сесии
session_set_cookie_params('ДЛИННА ЖИЗНИ СЕССИИ В СЕКУНДАХ'); # выставляем время жизни сесии
session_id($sesion_id); # заносим ранее сгенерированный номер сессии
session_start(); # заводим сессию с выше присвоеными параметрами
$_SESSION['name']='ИМЯ СЕССИИ'; # Записываем имя сесии в переменную
### Записываем в базу в таблицу 'session' данные id_session, date_start, date_stop, ip
mysql_query("INSERT INTO `session` (id_session, date_start, date_stop, ip) VALUES('". $sesion_id ."', NOW(), NOW(), '". $user_ip ."')");
}
else{ # Если в базе уже есть сессия с таким IP то выполняем следующее
session_start(); # Продолжаем сессию
echo 'Все отлично данные в базе можно переписывать дату последнего посещения'; # Выводим сообщение об удачной работе
### Сюда можно поместить обновление данных в базе по данной сесии например обновление времени последней активности
}