Косячный ли код?, сессии, куки и мои пробелы в знаниях.

kolemming

Новичок
Косячный ли код?, сессии, куки и мои пробелы в знаниях.

PHP:
//************************** Страинца 1 которая ловит логин и пароль из формы

//Поймал логин пароль из формы
$username=$HTTP_POST_VARS['login'];
$userpass=$HTTP_POST_VARS['password'];

//ПРоверил в базе, получил данные по юзеру, если такой есть и все остальное про него

if ($id and strlen($roles)>0)
	    {
        session_start();

        $HTTP_SESSION_VARS['userid']=$id;
        $HTTP_SESSION_VARS['username']=$username;
		$HTTP_SESSION_VARS['userpass']=$userpass;
        $HTTP_SESSION_VARS['roles']=$roles; //из базы
        //Редирект на нужную страницу
        }
else
	{
    	//Досвидание
    }


//******************************* Страинца 2 та, что не для всех 
@ session_start();
@ $userid=$HTTP_SESSION_VARS['userid'];
@ $username=$HTTP_SESSION_VARS['username'];
@ $userpass=$HTTP_SESSION_VARS['userpass'];
@ $userroles=$HTTP_SESSION_VARS['roles'];

if(strlen($userroles)==0)
{
	//Грохаем сессию и выдаем сообщение
    session_destroy();
    echo 'Отсутствуют права на выполнение операций!';
    exit;
}
else
{
	//строим страницу в соответствии с ролями
}

1. Вопрос, косячный ли этот алгоритм и код? Один раз как то давно сделал такую вот авторизацию и до сих пор юзаю этот алгоритм. Насколько он косячный и вообще косячный ли?

2. В этом посте увидел вопрос как скрыть SID из URL, ответ передавать его через куки, но при использовании вышеприведенного кода в строку URL адреса у меня не попадает никакого SID, но и не ставится никакой куки(физически ее нет в нужной папке). В чем фича и чего я не понимаю или не знаю про куки? Собственно, я никогда не сталкивался вообще с потребностью ставить куки и до сих пор было лень разобраться :(
 

neko

tеam neko
если бы у тебя не было SID'а ни в куках, ни в URL то сессии вообще бы не работали

подробнее тут:
PHP FAQ: Сессии. Подробное описание работы и объяснение механизма.

-~{}~ 19.12.04 12:57:

но и не ставится никакой куки(физически ее нет в нужной папке)
на клиенте чтоли?
они ставятся на время жизни браузера, т.е. expire = 0
 

kolemming

Новичок
Ок, появляется ли физически файл с кукой в папке Cookies или нет, в момент когда я захожу на страницы построенные повышеприведенной схеме?
 

neko

tеam neko
вообще-то это зависит от браузера, а не от php
но afaik -- нет

и смотри заголовки, чтоб такое больше не ляпать про куки :)
 

Фанат

oncle terrible
Команда форума
Косячный.
и код и подход.
зачем, к примеру, в сессию класть пароль?
Это небезопасно, а главное - не нужно.

зачем там везде собаки?
зачем все значения присваивать переменным?
зачем присвоения идут ДО проверки ролес? :)
Массив HTTP_SESSION_VARS устарел

В этом посте увидел вопрос как скрыть SID из URL
В этом посте ничего про скрытие сид не написано.
Никакого "скрытия" не бывает. Если что-то скрыто, то оно ЕСТЬ, но его не видно. А здесь никаких скрытий нет. Либо есть, либо нет.
И вообще, вопрос "скрытия" и "альтернатив" не стоит.
По умолчанию пхп настроен именно так, что передает через куки и не передает через урл. Так что стандартом является как раз кука, а альтернативой - урл.
но и не ставится никакой куки(физически ее нет в нужной папке).
запомни навсегда.
То, что браузер пишет к себе на диск. к кукам не меет никакого отношения.
Вообще забудь про всякие папки.
Кука - это заголовок в протоколе НТТР. И ВСЁ. Больше нигде никаких кук не бывает.
 

kolemming

Новичок
зачем, к примеру, в сессию класть пароль?
Спасибо, ступил он там лишний.

зачем все значения присваивать переменным?
С ними проще работать, потому что часто обращаюсь к ним...

зачем там везде собаки?
Спасибо. Остались со времен кода я не понимал сообщения "Заголовки уже посланы", пытался его ими побороть :( Убрал все пашет.

зачем присвоения идут ДО проверки ролес?
??? "strlen($roles)>0" чем не проверка, на то что хотя бы одна роль, но есть.

Массив HTTP_SESSION_VARS устарел
Что использовать?
 

Фанат

oncle terrible
Команда форума
"strlen($roles)>0" чем не проверка
вот я и говорю - зачем сначала присваиваешь, а потом проверяешь? смысла нет. К тому же, нотайс как раз и вылезет при Е_АЛЛ и если сессии не будет.
Что использовать?
neko тебе уже дал ссылку - там все написано.
 
Сверху