кнопка logout

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

кнопка logout

Непрочитанное сообщение schizoid » 2009-10-29 12:47:52

Народ, сильно не пинайте, я в php почти никак.
Есть внутренний сайт, в нем система авторизации вот таким вот образом:

Код: Выделить всё

if (!isset($_SERVER['PHP_AUTH_USER']))

{
        Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
}

else {
        if (!get_magic_quotes_gpc()) {
                $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
                $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
        }

        $query = "SELECT pass,user,name FROM userlist WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
        $lst = @mysql_query($query);

        if (!$lst)
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
        }

        if (mysql_num_rows($lst) == 0)
        {
           Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }

        $pass =  @mysql_fetch_array($lst);
        if ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }
}
как в таком случае прикрутить к сайту кнопку "Выход", что б не закрывая броузер можно было залогиниться под другим пользователем?
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: кнопка logout

Непрочитанное сообщение paradox » 2009-10-29 12:53:59

мне кажеться никак

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: кнопка logout

Непрочитанное сообщение schizoid » 2009-10-29 13:05:22

т.е. нужно переделывать систему авторизации?
если да, то какая нужна?
и какая у меня сейчас... :oops:
ядерный взрыв...смертельно красиво...жаль, что не вечно...

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: кнопка logout

Непрочитанное сообщение paradox » 2009-10-29 13:07:57

Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
наскоко я понимаю это авторизация апача
и после ее прохода
обратно уже никак (хотя может я не знаю чего)

что бы было нормально на основе всяких логаут
то нужно делать авторизацию по сессиями в php
и отслеживать их

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: кнопка logout

Непрочитанное сообщение schizoid » 2009-10-29 13:33:33

аха. лады. пошел гуглить
ядерный взрыв...смертельно красиво...жаль, что не вечно...

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: кнопка logout

Непрочитанное сообщение paradox » 2009-10-29 13:41:51

мой биллинг можешь скачать там по сессиям
правда я делал еще в 2004 году
так что может уже что устарело
или php чего поддерживать перестал

Sla
мл. сержант
Сообщения: 73
Зарегистрирован: 2008-08-19 15:09:19

Re: кнопка logout

Непрочитанное сообщение Sla » 2009-10-29 14:30:39

а посылая
Header ("HTTP/1.0 401 Unauthorized");

разве не происходит логаут?

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: кнопка logout

Непрочитанное сообщение schizoid » 2009-10-29 15:42:38

та вот что-то не получается с ним.
уже собсна почти написал авторизацию через сессии
ядерный взрыв...смертельно красиво...жаль, что не вечно...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: кнопка logout

Непрочитанное сообщение zg » 2009-10-29 21:29:33

schizoid писал(а):        if (!get_magic_quotes_gpc()) {
                $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
                $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
        }
ты где этого нахватался?
http://ru.php.net/manual/en/info.config ... quotes-gpc

Sets the magic_quotes state for GPC (Get/Post/Cookie) operations.
schizoid писал(а):как в таком случае прикрутить к сайту кнопку "Выход"
у меня сделано так

Код: Выделить всё

<?

// Стартуем сессию
if ( !session_id() ) session_start();

// Разлогирование и повторный запрос пароля
if ( isset($_SESSION['LOGOUT']) && $_SESSION['LOGOUT'] === true )
{
	$_SESSION['LOGOUT'] = false;
	sendAuthHeaders();
}

// Проверка на "вшивость"
if ( !isset($_SERVER['PHP_AUTH_USER']) || !$_SERVER['PHP_AUTH_USER'] ) sendAuthHeaders();
if ( !isset($_SERVER['PHP_AUTH_PW'  ]) || !$_SERVER['PHP_AUTH_PW'  ] ) sendAuthHeaders();

// Авторизуем пользователя
if ( !authUser($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) ) sendAuthHeaders();

// Авторизация прошла успешно!
return true;

/**
 * Функция авторизует пользователя и сохраняет его в сессии
 *
 * @param string $login
 * @param string $password
 * @return bool
 */
function authUser($login, $password)
{
	// Если в сессии есть значения
	if ( isset($_SESSION['PW_USER']) )
	{
		/* @var $user User */
		$user = $_SESSION['PW_USER'];
		
		// Проверяем пользователя в сессии
		if ( $user->login === $login && $user->password === $password )
		{
			// Данные пользователя в сессии совпали, пользователь уже авторизован
			return true;
		}
		else 
		{
			// Пользователь в сессии не совпал, нужна новая авторизация
			unset($_SESSION['PW_USER']);
			
			return false;
		}
	}
	
	// Пользователь
	$user = new User();
	
	// Проверяем непосредственно логин и пароль
	if ( $user->loadByLoginPassword($login, $password) )
	{
		// Пользователь успешно авторизован
		
		// Сохраняем его в сессии
		$_SESSION['PW_USER'] = $user;
		
		return true;
	}
	
	// Авторизация провалилась
	return false;
}

// Авторизация
function sendAuthHeaders()
{
	header('WWW-Authenticate: Basic realm="Enter login and password please"');
	header('HTTP/1.0 401 Unauthorized');
?>
<h1>Вы не авторизованы</h1>
<p>Пожалуйста, повторите запрос и введите логин и пароль.</p>
<script type="text/javascript">location.href="/";</script>
<?
	exit;
}

// Выход из сессии
function logout($redirect)
{
	$_SESSION['LOGOUT'] = true;
	unset($_SESSION['PW_USER']);
	
	session_commit();
	
	header('Location: '. $redirect);
	exit();
}

?>
когда мне надо сделать логаут, то просто

Код: Выделить всё

logout('/');

denys
проходил мимо

Re: кнопка logout

Непрочитанное сообщение denys » 2013-10-25 16:26:13

Я так понимаю по видео-урокам Попова учился ? забудь всё и начни с начала