Здравствуйте, пытаюсь прикрутить форму регистрации, с это статьи на Хабре
https://habrahabr.ru/post/13726/
Так, как указано в статье, всё получилось. Я адаптировал для следующей задачи
1) Открывается модальное окно, вводится логин и пароль
2) При совпадении страница перезагружается, во входной точке идёт проверка в check.php (Из той же статьи на хабре) и Twig подставляет Никнейм на место Логина.
Дак вот проблема в том, что check.php обращается к Кукам, а они не записываются, при обращении к файлу login.php АЯКС запросом, место подстановки куков выделено жирны и подставлен комментарий.
Попробовал в аякс запрос добавить заголовки, не помогло.
$.ajax({
type: "POST",
data: {login:login, password:password},
url: 'lib/getlogin.php',
headers: {
'Cookie': document.cookie
}
});
Что это может быть? Я уже 2 часа бьюсь, неужели setcookie не срабатывает при AJAX обращении?
Пока вижу решение, на клиенте сохранять куки, но оно не особо меня устраивает
login.php
function generateCode($length=6) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
$code = "";
$clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;
}
if(isset($_POST['password']))
{
# Вытаскиваем из БД запись, у которой логин равняеться введенному
$query = mysql_query("SELECT user_id, user_password FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1");
$data = mysql_fetch_assoc($query);
# Соавниваем пароли
if($data['user_password'] === md5(md5($_POST['password'])))
{
# Генерируем случайное число и шифруем его
$hash = md5(generateCode(10));
if(!@$_POST['not_attach_ip'])
{
# Если пользователя выбрал привязку к IP
# Переводим IP в строку
$insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
}
# Записываем в БД новый хеш авторизации и IP
mysql_query("UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");
# Ставим куки
setcookie("id", $data['user_id'], time()+60*60*24*30);
setcookie("hash", $hash, time()+60*60*24*30);
# Переадресовываем браузер на страницу проверки нашего скрипта
print "1"; exit();
}
else
{
print "Вы ввели неправильный логин/пароль";
}
}
check.php
if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
{
$query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
$userdata = mysql_fetch_assoc($query);
// or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0"))
if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']))
{
setcookie("id", "", time() - 3600*24*30*12, "/");
setcookie("hash", "", time() - 3600*24*30*12, "/");
print "Хм, что-то не получилось";
}
else
{
$nameUser = "123";
}
}