[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Аутентификация с помощью кук
Хозяин Огня
Здравствуйте. Помогите пож. с проблемкой.
У меня значит на индексе сначала идёт проверка правильности ввода:
PHP
<?
include 
"../config.php";

if (isset (
$_POST['login']) && ($_POST['login']==$adm) &&
    isset (
$_POST['pass']) && ($_POST['pass']==$ps))
{
    
$session = array ("login" => $adm"pass" => md5($ps));
    @ 
setcookie ("session"serialize($session), time() + 60 1"/");
    
header ("Location: index.php"); // редирект на эту же страничку
    
exit;

else
 if ( isset (
$_COOKIE["session"]) )

    
// Вход уже выполнен, проверяем корректность данных в куки:
    
$session unserialize ($_COOKIE["session"]);
    if ( isset (
$session["login"]) && $session["login"] == $adm &&
         isset (
$session["pass"]) && $session["pass"] == md5($ps))
    {
        @ 
setcookie ("session"$_COOKIE["session"], time() + 60 1"/");


Далее, собственно, сама админка - таблицы с сообщениями, ссылками на удаление и т.д
И в самом конце - форма ввода пароля и логина.

Проблема в следующем - судя по всему после ввода пароля идёт редирект обратно на форму ввода, хотя должна открываться сама админка, ну, то, что после последней строчки описанного выше кода.
Я менял локейшн на главную страницу сайта - открывает как положено.
Наверное куки не инициализируются, не знаю. Надеюсь на вашу помощь




Спустя 7 минут, 48 секунд (13.10.2009 - 22:37) twin написал(а):
В куку нелзя поместить массив в чистом виде Нужно сериализовать его функцией serialize()

Упс, прошу пардона, слона и не заметил biggrin.gif

Спустя 6 минут, 57 секунд (13.10.2009 - 22:44) Oyeme написал(а):
не подавляй ошибки через "@"

ВЫведи массив Cookie

print_r($_COOKIE);
Пересмотри все переменный пере дынные постом,значит что-то true.

Спустя 2 минуты, 35 секунд (13.10.2009 - 22:47) twin написал(а):
Попробуй это.
PHP
<?php  
$cookie 
= "А вот и кука. <a href='?delet=1'>Удалить</a>";  
$test 
= "Нет куки. <a href='?install=1'>Поставить</a>";  
if(isset($_GET['delet']))  
{  
setcookie
("test", "", time()-3600*24"/" );  
header
("location: ".$_SERVER['PHP_SELF']);  
}  
elseif(isset($_GET['install']))  
{  
setcookie
("test", $cookie, time()+3600*24*30"/");  
header
("location: ".$_SERVER['PHP_SELF']);  
}  
$test 
= isset($_COOKIE['test'])?$_COOKIE['test']:$test;  
echo $test
;

Проблема с кукисами где то у тебя. Скрипт рабочий вообще то, я проверил.

Спустя 6 минут, 40 секунд (13.10.2009 - 22:54) Хозяин Огня написал(а):
Да, на денвере и у меня работает. Не работает после заливки на хост.


twin, а это куда сувать? Или это чисто для проверки работы куков?

Спустя 2 минуты, 46 секунд (13.10.2009 - 22:56) twin написал(а):
Цитата
Или это чисто для проверки работы куков?

да. залей на сервак и поклацай

Спустя 13 минут, 8 секунд (13.10.2009 - 23:10) Хозяин Огня написал(а):
Проблемка разрешилась - оказывается был косяк с экранированием кавычек. Всем спасибо за отзывчивость.

Спустя 17 минут, 55 секунд (13.10.2009 - 23:27) Хозяин Огня написал(а):
А не подскажите, как сделать то же самое только с помощью сессий?

Спустя 11 минут, 1 секунда (13.10.2009 - 23:38) Gram написал(а):
[?

Спустя 1 час, 42 минуты, 8 секунд (14.10.2009 - 01:21) twin написал(а):
Цитата
А не подскажите, как сделать то же самое только с помощью сессий?

Ну если прям тоже самое smile.gif
PHP
<?
include "../config.php";
session_start();
if (isset ($_POST['login']) && ($_POST['login']==$adm) &&
    isset ($_POST['pass']) && ($_POST['pass']==$ps))
{
    $_SESSION['session'] = array ("login" => $adm, "pass" => md5($ps));
    header ("Location: index.php"); // редирект на эту же страничку
    exit;
}
 
else
 if ( isset ($_SESSION["session"]) )
{
 
    
// Вход уже выполнен, проверяем корректность данных в сессии:
    if ( isset ($_SESSION["session"]["login"]) && $_SESSION["session"]["login"] == $adm &&
         isset ($_SESSION["session"]["pass"]) && $_SESSION["session"]["pass"] == md5($ps))
    {

Спустя 5 часов, 32 минуты, 51 секунда (14.10.2009 - 06:53) Хозяин Огня написал(а):
Gram , в том смысле что кроссовки не одевают под смокинг или что это то же самое, тока вид чуть другой?

twin , спасибо. А какой способ предпочтительнее? Или без разницы?

Спустя 2 часа, 17 минут, 19 секунд (14.10.2009 - 09:11) glock18 написал(а):
Хозяин Огня
Оба варианта имеют право на жизнь. Во только с куками нужно быть осторожнее - ты кладешь в них в незашифрованном виде логин и пароль пользователя. В случае с куками, лучше всегда их шифровать (мое имхо) + никогда не хранить в них (даже в зашифрованном виде) пароль и логин. валидность куки лучше проверять как раз при помощи шифрования, а не авторизацие по приходящим кукам.

Второй вариант: ограничить отправку кук (всех кроме сессионной) только по защищенному протоколу. Хотя и в этом случае желательно их кодировать.

Спустя 2 минуты, 15 секунд (14.10.2009 - 09:13) twin написал(а):
Если сравнивать именно эти два варианта, то на сессиях предпочтительнее, потому что
а) Куки могут быть отключены
б) В кукис выносить пароль даже в шифрованном виде небезопасно.
Но. Сессия живет пока открыт браузер и по умолчанию 24 минуты. Если нужна аунтификация на долго, то без куккиса не обойтись.

PS синхронно как smile.gif

Спустя 3 часа, 52 минуты, 3 секунды (14.10.2009 - 13:05) Хозяин Огня написал(а):
Не сходится:

Цитата (glock18)
никогда не хранить в них (даже в зашифрованном виде) пароль и логин.


и

Цитата (twin)
Если нужна аунтификация на долго, то без куккиса не обойтись.


twin, попробовал твой последний пример. Сессия кончается с закрыитем браузера. А если нужно чтобы можно было заканчивать сессию собственноручно? Типа кнопки "выход"?
Сделал так:
PHP
<form method="POST">
<
input type=submit name="destroy_sess" value="Выход">
<?
 if (isset(
$_POST['destroy_sess'])) session_destroy();

но выходит только после второго нажатия.

Спустя 7 минут, 39 секунд (14.10.2009 - 13:13) glock18 написал(а):
Хозяин Огня
сходится. если построить диаграмму Эйлера Венна, то и не такое сойдется smile.gif

хранить в куках стоит разве что id или временный хэш. пароль хранить в незакодированном виде... а ты знаешь, что все куки элементарно перехватываются? так хотя бы пароль не подавать для входа.

Спустя 1 час, 18 минут, 47 секунд (14.10.2009 - 14:31) twin написал(а):
Цитата
Сделал так:PHP
<form method="POST">
<input type=submit name="destroy_sess" value="Выход">
<?
if (isset($_POST['destroy_sess'])) session_destroy();


но выходит только после второго нажатия.

Нужно перед уничтожением сессии удалить переменные. Потому что они уже в оперативке и сессия тут не при чем. Надо так:
PHP
if (isset($_POST['destroy_sess'])) 
{
session_unset();
session_destroy();
}
Только обнулятся все переменные. Если нужно какие то оставить, то удалять надо по одной, функцией unset();

Спустя 7 часов, 3 минуты, 18 секунд (14.10.2009 - 21:35) Хозяин Огня написал(а):
glock18 , понятно.

twin, всё равно выходит только после второго нажатия huh.gif

Спустя 2 часа, 7 минут, 34 секунды (14.10.2009 - 23:42) Gram написал(а):
Быстрый ответ:

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