Я проверяю форму входа в систему с вызовом jQuery AJAX на PHP. В php я создаю сеанс, и если они проверяют флажок «запомнить меня», я хочу создать файл cookie. Вот код php:
<?php include '../includes/connection.php'; date_default_timezone_set('GMT'); $name = $_POST['username']; $pass = $_POST['password']; $query = mysql_query("SELECT id, username, password FROM users WHERE username = '$name' LIMIT 1"); if(mysql_num_rows($query) == 0) { echo 'error'; exit; } while($row = mysql_fetch_array($query)) { if($row['username'] == $name && $row['password'] == $pass) { session_start(); $_SESSION['username'] = $row['username']; $_SESSION['usrID'] = $row['id']; echo 'success'; if($_POST['remember']) { setcookie('username', $row['username'], $exp); setcookie('password', $row['password'], $exp); setcookie('usrID', $row['id'], $exp); } } else { echo 'error'; exit; } } ?>
Сессия установлена успешно, однако файл cookie не установлен вообще. Я попытался установить все значения (домен, путь и т. Д.), Но это ничего не изменило. Есть ли что-то очевидное, что мне не хватает?
Вот несколько советов:
При настройке файла cookie на перенаправляемой странице cookie должен быть установлен после вызова header('Location: ....');
например:
header('Location: http://www.example.com/'); setcookie('asite', $site, time()+60*60, '/', 'site.com');
Если у вас есть человеческие URL-адреса, такие как www.domain.com/path1/path2/
, тогда вы должны установить путь к файлу cookie для работы для всех путей, а не только для текущего.
setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
Обратите внимание на последние /
аргументы.
Из руководства по PHP:
Путь на сервере, на котором будет доступен cookie. Если установлено значение '/', файл cookie будет доступен во всем домене. Если установлено значение '/ foo /', cookie будет доступен только в каталоге / foo / и всех подкаталогах, таких как / foo / bar / домена. Значение по умолчанию – это текущий каталог, в который установлен файл cookie.
setcookie()
определяет cookie для отправки вместе с остальными HTTP-заголовками. Как и другие заголовки, файлы cookie должны быть отправлены до выхода из вашего скрипта, что означает, что до этого не должно быть инструкций html / code echo. Вы не сможете установить сервер cookie при использовании вызова AJAX. Вместо этого дождитесь, пока вы получите успешный ответ и установите сторону клиента cookie. Чтобы было проще, вы можете использовать плагин jQuery .