Страница 1 из 1

кнопка logout

Добавлено: 2009-10-29 12:47:52
schizoid
Народ, сильно не пинайте, я в 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();
        }
}
как в таком случае прикрутить к сайту кнопку "Выход", что б не закрывая броузер можно было залогиниться под другим пользователем?

Re: кнопка logout

Добавлено: 2009-10-29 12:53:59
paradox
мне кажеться никак

Re: кнопка logout

Добавлено: 2009-10-29 13:05:22
schizoid
т.е. нужно переделывать систему авторизации?
если да, то какая нужна?
и какая у меня сейчас... :oops:

Re: кнопка logout

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

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

Re: кнопка logout

Добавлено: 2009-10-29 13:33:33
schizoid
аха. лады. пошел гуглить

Re: кнопка logout

Добавлено: 2009-10-29 13:41:51
paradox
мой биллинг можешь скачать там по сессиям
правда я делал еще в 2004 году
так что может уже что устарело
или php чего поддерживать перестал

Re: кнопка logout

Добавлено: 2009-10-29 14:30:39
Sla
а посылая
Header ("HTTP/1.0 401 Unauthorized");

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

Re: кнопка logout

Добавлено: 2009-10-29 15:42:38
schizoid
та вот что-то не получается с ним.
уже собсна почти написал авторизацию через сессии

Re: кнопка logout

Добавлено: 2009-10-29 21:29:33
zg
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('/');

Re: кнопка logout

Добавлено: 2013-10-25 16:26:13
denys
Я так понимаю по видео-урокам Попова учился ? забудь всё и начни с начала