куки и авторизация

ixin

Guest
куки и авторизация

Решил написать авторизация через куки, но возникла следующая проблема.
Алгоритм авторизации такой:
В самом начале когда пользователь входит на индексную страницу скрипт проверяет существуют ли куки, если существуют он пробивает значение куки по базе данных, если они совпали, то в браузере выдаётся кто авторизован, если не совпали, то удаляются куки, и проверяются по базе данных значения введённые пользователем, если они не совпадают ничего не делаем, если совпадают авторизуем!!! Скрипт авторизации имеет такой вид:
PHP:
<?php		
// функция присоединения к базе данных
	function connect() {
		mysql_connect( "localhost", "root", "") or 
			die ( mysql_error() );
		mysql_select_db( "PR0ject_2501");
	}

// функция авторизации
	function authentification( ){

		global $authMenu, $user, $pswd, $auth, $PR0login, $PR0pass, $id;
// в $res заносим всю базу данных
		$res = mysql_query( "SELECT * from ureg" );
// $authMenu находится поле введения данных выплывающее при первом заходе на индексную страницу
		$authMenu = "
				<center>
				<form action=\"index.php\" method=\"POST\">
					<input type=\"text\" name=\"user\" size=\"15\"><br>
					<input type=\"password\" name=\"pswd\" size=\"15\"><br>
					<input type=\"submit\" name=\"auth\" value=\"go\"><br>
				</form>				
				</center>";
// проверяем существование куки и верность содержащихся в них значений
		if ( isset( $PR0login ) &&  isset( $PR0pass ) )		
			while( $Row = mysql_fetch_row( $res ) ) 
				if( $Row[ 0 ] == $PR0login ){
					if( $Row[ 1 ] == $PR0pass ){
// если всё нормально то присваиваем переменной которая выводится на индексной странице логин
						$authMenu = $PR0login;						
						break;
					}
// если, не правильные значения удаляем куки
					else{
						SetCookie( "PR0login" );
						SetCookie( "PR0pass" );
					}	}					
// если была нажата кнопка submit то проверяем введённые значения, если они верны то заносим в куки и при следующем заходе пользователь будет автоматически авторизован, если данные не правильные то ничего не делаем		
		if( isset( $auth) )
			while( $Row = mysql_fetch_row( $res ) ) 
				if( $Row[ 0 ] == $user)
					if( $Row[ 1 ] == $pswd){
						SetCookie( "PR0login", $user, time() + 3600);
						SetCookie( "PR0pass", $pswd, time() + 3600);
						$authMenu = $PR0login;
						header( "Location: [url]http://PR0ject2501[/url]");
						break;
					}
// на индексной странице под авторизованным логином есть ссылка под названием "выход" для того чтобы пользователь мог ввести другой логин, как раз то здесь и проблема. Когда пользователь нажимает на этот линк, он отсылает на индексную с передачей значения переменной $id=1, в этом модуле если $id==1 то мы просто на просто удаляем куки авторизации. Всё было бы хорошо, но после удаления при введении нового логина и пароля почему то не авторизуется, куки по прежнему имеют вид "PR0login: ", "PR0pass: ". А когда закрываешь браузер, и заходишь снова ( до закрытия мы нажимали на линк "выход" ) он тебя авторизует. Помогите разобраться!!!
			if( $id == 1 ){
				SetCookie( "PR0login" );
				SetCookie( "PR0pass" );
				header( "Location: [url]http://PR0ject2501[/url]");
			}
		
	}
?>
 

Сергей123

Новичок
Не проверяя правильность, по коду просто:

header( "Location: <a href="http://PR0ject2501" target="_blank">http://PR0ject2501</a>");
Это форум побил или в коде так?

$_COOKIE использовать надо.

Используешь SELECT * и обращаешься через _fetch_row к [0] и [1]. Почему не _fetch_assoc?

Почему && не используешь при проверке логина и пароля?

Зачем всех user'ов выбираешь?

Рано ещё, короче...
 

ixin

Guest
Сожалею за невнятность своего вопроса! Вопрос заключался именно в :
PHP:
// на индексной странице под авторизованным логином есть ссылка под названием "выход" для того чтобы пользователь мог ввести другой логин, как раз то здесь и проблема. Когда пользователь нажимает на этот линк, он отсылает на индексную с передачей значения переменной $id=1, в этом модуле если $id==1 то мы просто на просто удаляем куки авторизации. Всё было бы хорошо, но после удаления при введении нового логина и пароля почему то не авторизуется, куки по прежнему имеют вид "PR0login: ", "PR0pass: ". А когда закрываешь браузер, и заходишь снова ( до закрытия мы нажимали на линк "выход" ) он тебя авторизует. Помогите разобраться!!! 
            if( $id == 1 ){ 
                SetCookie( "PR0login" ); 
                SetCookie( "PR0pass" ); 
                header( "Location: <a href="http://PR0ject2501" target="_blank">[url]http://PR0ject2501[/url]</a>"); 
            }
Спасибо что хоть кто-то уделил мне время, в итоге я разобрался сам. Дело было в том что при удалении куки я не учитывал её время жизни. Таким образом надо было
PHP:
SetCookie( "PR0login", "", time() - 3600 );
SetCookie( "PR0pass", "", time() - 3600 );
А насчёт того что ещё рано, ты не прав.
 
Сверху