Возможно для кого-то будет полезно: [sql]CREATE TABLE session ( id_session tinytext NOT NULL, putdate datetime NOT NULL default '0000-00-00 00:00:00', user tinytext NOT NULL ) TYPE=MyISAM;[/sql] Скрипт регистрации посетителей в таблице session PHP: <?php // Начинаем сессию session_start(); // Получаем уникальный id сессии $id_session = session_id(); // Устанавливаем соединение с базой данных include "config.php"; // Проверяем, присутствует ли такой id в базе данных $query = "SELECT * FROM session WHERE id_session = '$id_session'"; $ses = mysql_query($query); if(!$ses) exit("<p>Ошибка в запросе к таблице сессий</p>"); // Если сессия с таким номером уже существует, // значит пользователь online - обновляем время его // последнего посещения if(mysql_num_rows($ses)>0) { $query = "UPDATE session SET putdate = NOW(), user = '$_SESSION[user]' WHERE id_session = '$id_session'"; mysql_query($query); } // Иначе, если такого номера нет - посетитель только что // вошёл - помещаем в таблицу нового посетителя else { $query = "INSERT INTO session VALUES('$id_session', NOW(), '$_SESSION[user]')"; if(!mysql_query($query)) { echo $query."<br>"; echo "<p>Ошибка при добавлении пользователя</p>"; exit(); } } // Будем считать, что пользователи, которые отсутствовали // в течении 20 минут - покинули ресурс - удаляем их // id_session из базы данных $query = "DELETE FROM session WHERE putdate < NOW() - INTERVAL '20' MINUTE"; mysql_query($query); ?> Выводим содержимое таблицы session PHP: <?php // Устанавливаем соединение с базой данных include "config.php"; // Выводим имена всех посетителей, записи о которых имеются // в таблице session $query = "SELECT * FROM session"; $ath = mysql_query($query); if(!$ath) exit("<p>Ошибка в запросе к таблице сессий</p>"); // Если хоть кто-то есть - выводим таблицу if(mysql_num_rows($ath)>0) { echo "<table>"; while($author = mysql_fetch_array($ath)) { // Если посетитель не зарегистрирован // выводим вместо его имени - "аноним" if(empty($author['user'])) echo "<tr><td>аноним</td></tr>"; else echo "<tr><td>".$author['user']."</td></tr>"; } echo "</table>"; } ?> Конфигурационный файл config.php PHP: <?php // сейчас выставлен сервер локальной машины $dblocation = "localhost"; // Имя базы данных, на хостинге или локальной машине $dbname = "dbase"; // Имя пользователя базы данных $dbuser = "root"; // и его пароль $dbpasswd = ""; // Устанавливаем соединение с базой данных $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd); if (!$dbcnx) { exit( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" ); } // Выбираем базу данных if (! @mysql_select_db($dbname,$dbcnx) ) { exit( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" ); } // Определяем версию сервера $query = "SELECT VERSION()"; $ver = mysql_query($query); if(!$ver) exit("Ошибка при определении версии MySQL-сервера"); $version = mysql_result($ver, 0); list($major, $minor) = explode(".", $version); // Если версия выше 4.1 сообщаем серверу, что будем работать с // кодировкой cp1251 $ver = $major.".".$minor; if((float)$ver >= 4.1) { mysql_query("SET NAMES 'cp1251'"); } ?> Так-же есть таблица users : [sql]CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `email` varchar(255) NOT NULL, `pwd` varchar(255) NOT NULL, `auth` enum('yes','no') NOT NULL default 'no', `f` varchar(255) NOT NULL, `i` varchar(255) NOT NULL, `o` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;[/sql] вот у меня проблема, не могу сделать простейшую регистрацию и авторизацию с использованием md5, подскажите пожалуйста
Ээ, скрипт не смотрел. Можно отказаться от if(SELECT) UPDATE else INSERT в пользу INSERT ON DUPLICATE KEY UPDATE + я предпочитаю хранить время в unix timestamp (правильно ли это - я не знаю, что думают камрады?) + не интересно без ООП 8)
Много кода. Конструкции $_SESSION[user], пусть даже без конкатикации работают на 300% медленнее $_SESSION['user']. У меня реализация данной функции на сделанной до этого системе авторизации заняла пара строк коду. Без авторизации вообще запросов в базу данных не было. Только работа с сессиями и подсчет их в сессионной директории. *задумался*
При регистрации пользователя получаем md5 от пароля, заносим в БД. При авторизации получаем md5 от введенного в форму пароля и сравниваем с хешем, хранящимся в БД.
юниксовый штамп времени универсален, и из него можно без особых усилий что угодно скрутить функцией date, зато с ним же можно производить массу преобразований легких("DELETE * WHERE date < ".(time() - 300) - удаляем все старше 5 минут и тд) короче мой выбор )
я привык все хранить в секундах, так как время измеряю секундами -> минутами -> часами и для прошлых веков сайтов не делаю, если что-то такое предстоит - то тогда и извращусь =) для запоминания времени постов, заходов, комментов и прочего-прочего мне хватает unix штампа.
оу. т.е. даты рождения ты не хранишь нигде? нуну. Повидали мы таких чудосайтоделов. Все оптимизации в голове от безделья.
Sofia мы вроде бы обсуждали уже эту тему... кстате я б хранил время сессии именно в юникс. а вот даты рождения в дате....
Не нужно путать метку времени и дату. Не даром метка именуется "штамп". Дата -- это день рождения, а метка времени -- это когда ты купил хлеб и когда его съел.
однохерственно! однохерственно они внутрях хранятся как целые числа! Но для работы с датой-временем есть удобные функции и оптимизация поиска по ним, и выборок разных.
Не сложно написать функцию, которая бы понимала временную отметку в секундах хоть от рождества христова и возвращала дату в заданом формате. Только секунды надо будет хранить в float.
Решил использовать этот скрипт ,но работает он весьма посредственно: Во первых непонятно где определяется авторизирован человек или нет ,ведь БД users нигде не используется.Кроме того скрипт генерирует ошибку : Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\test1.ru\www\autorization.php:19) in Z:\home\test1.ru\www\insert_session.php on line 5. Я разместил скрипт у себя на денвере ,если сайт несколько раз перезагрузить ,то выписывается несколько АНОНИМОВ.Буду признателен если кто поможет разобраться,я новичок в этом деле.