[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессия + БД
Remka
Всем доброго дня

Пытаюсь занести каждую сессию в базу
во всех браузерах все работает
в 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']);

непомогает=(

Спустя 2 минуты, 48 секунд (11.12.2010 - 15:44) DySprozin написал(а):
Remka
а если так?

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: .');

Спустя 6 минут, 19 секунд (11.12.2010 - 15:59) Remka написал(а):
а может быть из за того что у меня что то на подобии чпу сделанно?

	
$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 должен стоять в самом начале файла. По крайней мере, _до_ первого вывода _любой_ информации (даже пробела) (;

Спустя 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 ставит какуюто хрень

Спустя 1 час, 3 минуты, 23 секунды (11.12.2010 - 17:12) inpost написал(а):
Remka
Редирект до вывода данных на экран! Любых...

Спустя 4 часа, 50 минут, 46 секунд (11.12.2010 - 22:03) Remka написал(а):
Неработает=(((

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 сессии

Спустя 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'];
туда загрузил рандомное значение
и после чего перезагружаю
и он пишет другое рандомное значение в базу
хотя то которое занесено в сессию осталась тамже

Спустя 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 минут заносим их в базу ЛОГ и удаляем.

Все проще простого
делаю но не работает=(((((

Спустя 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 'Все отлично данные в базе можно переписывать дату последнего посещения'; # Выводим сообщение об удачной работе
### Сюда можно поместить обновление данных в базе по данной сесии например обновление времени последней активности

}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.