|
 55.8 Кб |
|
| Сделал авторизацию через куки. Через jQuery передаю логин и пароль РНР-файлу в котором происходит такой код:
$pass = md5($pass);
$num = $db->query("SELECT * FROM `users`
WHERE `login`=" . $db->quote($login) . "
AND `pass`='" . $pass . "'");
if($num->rowCount() == 1){
$user = $num->fetch(PDO::FETCH_ASSOC);
$_SESSION['login'] = $user['login'];
$_SESSION['pass'] = $user['pass'];
$_SESSION['id'] = $user['id'];
setcookie('login', $user['login'], time()+604800);
setcookie('pass', $user['pass'], time()+604800);
setcookie('id', $user['id'], time()+604800);
echo "Вы удачно авторизировались!";
}
|
Возвращает "Вы удачно авторизировались!". Но на главной странице стоит код проверки авторизации:
if(empty($_COOKIE['login']) OR empty($_COOKIE['pass'])){
$Auth = new Auth();
$Auth->authForm();
} else {
echo "Добро пожаловать " . htmlspecialchars($_COOKIE['login'], ENT_QUOTES);
echo "<BR> <a href='" . URL . "?logout=1'>Выйти</a>";
}
//Если в куках логин или пароль пусты - вывести форму авторизации, иначе вывести приветствие.
|
И вот в чём проблема. Я авторизируюсь, в Опере куки появляются (в аттаче фотография), но он всё равно выводит форму авторизации :( Уже голову сломал в чём может быть дело, но так и не понял :(
PS. когда делал не через jQuery был еще один глюк, он мог создать по две куки. Только тогда в ОПЕРЕ было написано не class, а Catalog (так называется ГЕТ-переменная, а адрес выглядит примерно так www.why/Catalog/news, через mod_rewrite) | |
|
|
|
|
|
|
|
для: DEM
(06.08.2011 в 10:53)
| | А если вывести дамп массива $_COOKIE в нем что-то есть?
<?php
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(06.08.2011 в 11:40)
| |
Array
(
[PHPSESSID] => 534ada3c9e93e1236b0f0bbd1cad051a
)
|
А если делать не через jQuery, то на главной странице может быть пусто, а вот в разделе Category\news будет заполнен (и тогда на главной странице будет выводится форма, а не на главной - приветствие)...
Вот файл .htaccess:
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteRule index.php.* - [L]
RewriteRule ^News/id([0-9]+)$ /index.php?razdel=News&id=$1
RewriteRule ^Category/([a-zA-Z0-9]+)$ /index.php?razdel=Category&name=$1
RewriteRule ^Category/([a-zA-Z0-9]+)/page([0-9]+)$ /index.php?razdel=Category&name=$1&page=$2
RewriteRule ^id([0-9]+)$ /index.php?razdel=Why&id=$1
RewriteRule ^id([0-9]+)/plus/comm([0-9]+)$ /index.php?razdel=Why&id=$1&plus=1&comm=$2
RewriteRule ^id([0-9]+)/minus/comm([0-9]+)$ /index.php?razdel=Why&id=$1&minus=1&comm=$2
|
| |
|
|
|
|
|
|
|
для: DEM
(06.08.2011 в 12:03)
| | А jQuery каким методом передает данные (GET, POST)? И как вы их принимаете? Не могут они на этом этапе теряться? | |
|
|
|
|
|
|
|
для: cheops
(06.08.2011 в 13:05)
| | Данные передаются через $.post("API,php", {тут методы перечисляем});
Возвращается только "Вы удачно авторизировались!" и всё. все записи в куки производится в файле API.php | |
|
|
|
|
|
|
|
для: DEM
(06.08.2011 в 13:40)
| | Хорошо, jQuery отвправил вам данные методом POST, а где вы их извлекаете из $_POST? Там они никак теряться не могут? Хотя, конечно, если выводится фраза "Вы удачно авторизировались!", то вероятно все нормально.
PS А у вас смены домена не происходит? Т.е. переключения с site.dev на www.site.dev и наоборот? | |
|
|
|
|
|
|
|
для: cheops
(06.08.2011 в 13:58)
| | А вот это мысль, как буду дома проверю.
Спасибо! | |
|
|
|
|
|
|
|
для: DEM
(06.08.2011 в 14:06)
| | Проверил, вроде всё нормально(((
Вот код jQuery:
$('#AuthButt').live('click', function(){
// varLoad = $(this).parent().html("<div>Загрузка...</div>");
$.post("class/API.php",
{method: "Auth",
login: $('#login').val(),
pass: $('#pass').val()},
function(html){
if(html!=""){
alerter(2, html);
} else {
alerter(0, 'Произошла ошибка!');
}
});
});
|
А вот метод, который отвечает за авторизацию (при обращении к API.php идёт проверка отправленой переменной $_POST['method'] и если всё норм - вызывается определённый метод):
public function Auth($login, $pass){
global $db; //Знаю что это устарело, как исправлю баг с авторизацией, сразу исправлю
$pass = md5($pass);
$num = $db->query("SELECT * FROM `users`
WHERE `login`=" . $db->quote($login) . "
AND `pass`='" . $pass . "'");
if($num->rowCount() == 1){
$user = $num->fetch(PDO::FETCH_ASSOC);
$_SESSION['login'] = $user['login'];
$_SESSION['pass'] = $user['pass'];
$_SESSION['id'] = $user['id'];
setcookie('login', $user['login'], time()+604800);
setcookie('pass', $user['pass'], time()+604800);
setcookie('id', $user['id'], time()+604800);
echo "Вы удачно авторизировались!";
} else {
session_destroy();
setcookie('login');
setcookie('pass');
setcookie('id'); //на всякий случай удаляю данные, мало ли...
echo "Такой пользователь не найден!";
}
}
|
| |
|
|
|
|
|
|
|
для: DEM
(06.08.2011 в 14:28)
| | http://php.net/setcookie
Параметр $path. | |
|
|
|
|
|
|
|
для: Drago
(06.08.2011 в 15:01)
| | Поставил везде так:
setcookie('id', $user->info['id'], time()+604800, "", ""); (для логина и пароля тоже)
Но не помогло((( | |
|
|
|
|
|
|
|
для: DEM
(07.08.2011 в 06:56)
| | Конечно не поможет, потому что ничего не изменилось.
У вас проблема в том, что вы ставите куки в файле /class/API.php, а проверяете в /index.php. Без указания параметра $path, куки устанавливаются для всех файлов текущего каталога и вложенных в него. Если указать в $path корень веб-сервера "/", куки будут доступны в любом месте.
Параметр $domain там тоже неспроста, но об этом вам уже Хеопс намекал. | |
|
|
|
|
|
|
|
для: Drago
(07.08.2011 в 11:31)
| | О! Теперь всё работает! Спасибо большое!
Раньше просто никогда не работал с $path и $domain и поэтому столкнулся с такой проблемой :)
Еще раз спасибо! | |
|
|
|
|
|
|
|
для: Drago
(07.08.2011 в 11:31)
| | О! Теперь всё работает! Спасибо большое!
Раньше просто никогда не работал с $path и $domain и поэтому столкнулся с такой проблемой :)
Еще раз спасибо! | |
|
|
|
|
|
|
|
для: DEM
(07.08.2011 в 12:49)
| | Только еще один вопрос: а как обращаться к кукам из файла API.php? А то он перестал его видеть :( Я, к счастью, храню это всё еще и в сессии, но на будущее знать было бы полезно :) | |
|
|
|
|
|
|
|
для: DEM
(07.08.2011 в 15:51)
| | Значит опять что-то не так делаете. Если в $path стоит корень веб-сервера, куки должны быть доступны в любом каталоге, любом файле. | |
|
|
|
|
|
|
|
для: Drago
(07.08.2011 в 16:51)
| | Ясно, спасибо, буду смотреть :) | |
|
|
|