[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с авторизацией
timka_x
Пишу скрипт авторизации на свой сайт, столкнулся с такой бедой.

Скрипт работает с сессиями, если нет сессии то производим авторизацию.
if (isset($_SESSION['user'])) {}
если пользователь авторизовался изменяеться его статус на активный.
сессия принемает две переменные:

1. массив с данными пользователя;
2. снимаються блокировки на все линки, заметки и т. д.

При выходе естественно сессия разрушаеться и статус на неактивны.
Впринципе все нормально, только одно но.
А если пользователь не нажал выход, а просто закрыл браузер то получаеться, что сессия разрушаеться, а вот стаус (метка в мускуле) нет.

Пробовал делать разные проверки на сесиию и статус, чушь получаеться
$result=mysql_fetch_array($sql,$link);
if (!isset($_SESSION['user'])||$result>=1)
{Выполняем обнуление}
else {идем дальше}
Проверка идёт в самом начале.
Обнуление выполняеться на всех пользователей где статус активный,
даже если пользователь ноходиться на сайте и его статус активый.




Спустя 4 часа, 29 минут, 27 секунд (23.07.2009 - 03:19) Гость_hara написал(а):
А зачем отмачать что то в мускуле? Ведь всем зарегестрированным пользователям доступны все ссылки и т.д.? - Тогда просто если установлена $_SESSION['user'] то показывать ссылки.

Вобщем сначала объясните почему делать метки в базе необходимо, - тогда и получите ответ.

Спустя 5 часов, 58 минут (23.07.2009 - 09:17) timka_x написал(а):
Цитата (Гость_hara @ 23.07.2009 - 00:19)
А зачем отмачать что то в мускуле? Ведь всем зарегестрированным пользователям доступны все ссылки и т.д.? - Тогда просто если установлена $_SESSION['user'] то показывать ссылки.

Вобщем сначала объясните почему делать метки в базе необходимо, - тогда и получите ответ.

С помощь метки выводить статистику, если есть то пользователь online, если нет то соответственно нет

Спустя 1 час, 41 минута, 54 секунды (23.07.2009 - 10:59) Sylex написал(а):
timka_x
а в чем собственно вопрос, можешь конкретизировать?

Спустя 2 минуты, 57 секунд (23.07.2009 - 11:02) timka_x написал(а):
Вот мой код. Подключается просто, в том месте где хотим поставить
форму, прописываем include("aut.php"); и в каждом файле где хотим
использовать его, в начале session_start(); и всё.

Все устраивает, не могу решить проблему со статистикой, может есть
другой метод. smile.gif

aut.php:

<?php
@session_start();
$act=@$_GET['act'];

if (isset($_SESSION['user_id'])) {
$user_id=$_SESSION['user_id'];
echo $user_id_form;}

else {
$login_form="<table class='form' valign='top'>
<form method='POST' name='form' action='$PHP_SELF'>
<tr><td>Логин<br><input type='text' name='login' size='20'></td></tr>
<tr><td>Пароль<br><input type='password' name='pass' size='20'></td></tr>
<tr><td><input type='reset' name='Clear' value='Очистить'>
<input type='submit' value='Войти' name=sub><br>
</td></tr></form></table>
<table class='form'><tr><td>
<a class='form' href='?go=reg'>Регистрация</a> || <a class='form' href='?go=pass_'>Забыл пароль</a>
</td></tr></table>";
if (isset($_POST['login'])||isset($_POST['pass']))
{
$login=trim($_POST['login']); $pass=trim($_POST['pass']);
if ($login!=""||$pass!="")
{
$login=stripslashes($login);
$pass=stripslashes($pass);
$login=htmlspecialchars($login);
$pass=htmlspecialchars($pass);
//Тут функция усилинного хеша md5
$pass=pass_crypt($pass,$salt);

$query="select * from users where login='{$login}' and pass='{$pass}'";
$sql = mysql_query($query,$link) or die("Ошибка при подключении: ".mysql_error()." : ".mysql_errno());
$sql_array=mysql_fetch_array($sql);
if (mysql_num_rows($sql) == 1) {
//Обновляем статус
$users_status_on=mysql_query("update users set status='activ' where login='{$login}' and pass='{$pass}'",$link);
if ($users_status_on == 'true'){
$user_id=$sql_array;
$user_id_form="
<table class='form' valign='top'><tr><td align='center'>\n
<script language='JavaScript'>display_title();</script> ".@$user_id['name']."</td>\n
</tr><tr><td align='center'>\n
<img src='".@avatar($avat)."'></td></tr>\n
<tr><td align='center'>Вы были тут: ".@$user_id['last_date'].", ".@$user_id['last_time']."</td></tr>\n
<tr><td align='center'>группа: ".@$user_id['access_name']."</td></tr>\n
<tr><td align='center'><a class='form' href='index.php?go=reg'>Профиль</a> || <a class='form' href='index.php?act=exit'>Выход</a></td></tr>\n
</table>\n";
session_register("user_id_form");
session_register("user_id");
echo "<script>location.href='?';</script>";
}
} else {echo"<font color=red>Данные не верны! Проверьте правильность ввода.</font>".$login_form; }
}else { echo"<font color=red>Нужно заполнить все поля!</font>".$login_form;}
}else{ echo $login_form;}
}
//Выход из авторизации
if($act=="exit"){
@$user_id=$_SESSION['user_id'];
$last_date=date( "d.n.Y" );
$last_time=date( "G:i:s" );;
//Обновляем статус и дату последнего визита
$query_status = "update users set status='inactiv',last_date='$last_date', last_time='$last_time' where login='".$user_id['login']."' and pass='".$user_id['pass']."'";
$users_status_off = mysql_query($query_status,$link) or die("Ошибка при подключении: ".mysql_error()." : ".mysql_errno());
if ($users_status_off == 'true'){
session_unregister("user_id_form");
session_unregister("user_id");
session_unset();
echo "<script>location.href='?';</script>";}
}
//Все блокировки лежат в функциях, запрашиваються отдельно.
//Управление происходит из админки.
?>
Быстрый ответ:

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