2012-04-13 4 views
-1

Я сделал так, чтобы пользователи могли проверить «запомнить меня» в форме входа в систему, и она установит файлы cookie. Теперь, если они выходят из системы, они направляют их на logout.php, и файлы cookie должны быть удалены. Все работает, за исключением того, что я получаю эти сообщения об ошибках.Ошибка «Неопределенный индекс»

Примечание: Undefined индекс: имя пользователя в C: \ xammp \ HTDOCS \ шахты \ logout.php на линии 6

Примечание: Undefined индекс: пароль в C: \ xammp \ HTDOCS \ шахта \ logout.php на линии 7

Мой код logout.php является

<?php 

session_start(); 

if (isset($_SESSION['username'])) { 
    setcookie('username', $_POST['username'], false, '/'); 
    setcookie('password', $_POST['password'], false, '/'); 
    session_destroy(); 
    echo "You've benn logged out. <a href='index.php'>Click here</a> to return."; 
} else { 
    die ('You are not logged in!'); 
} 
+0

Использование 'false' в качестве третьего параметра не очистит файл cookie, он будет зарегистрирован как' 0', что сделает файл cookie до конца сеанса. Используйте время в прошлом, например. 'Времени() - 3600'. – kba

ответ

0

Просто используйте isset($_POST['username'])?$_POST['username']:'' вместо $_POST['username']

И isset($_POST['password'])?$_POST['password']:'' вместо $_POST['password']


См: Ternary Operator

0

Если пользователи хотят выйти из системы, то маловероятно, что они также представили свое имя пользователя или пароль на странице выхода, так $_POST['username'] и $_POST['password'] будет пустым, следовательно, вы получите ошибку.

Однако вам не нужно знать значения (фактическое имя пользователя или пароль), чтобы отменить куки-файл, вам просто нужно знать ключи (что буквально «имя пользователя» и «пароль»).

<?php 
session_start(); 
setcookie('username', '', time()-3600, '/'); 
setcookie('password', '', time()-3600, '/'); 
session_write_close(); 
header("Location: /"); 
?> 

Это будет выходить из системы и перенаправлять их на главную страницу.

+1

Это не очистит его куки, это его упомянутый метод проверки зарегистрированного пользователя – Lock

+0

@Lock. Вы правы. Я починил это. – kba

-1

Это связано с тем, что superglobal $_POST не имеет переменных username и password.

Я бы предположил, что при ссылке с index.php на logout.php вы не отправляете POSTing на logout.php (следовательно, этот вызов не будет иметь POST-переменные).

Что вам нужно сделать, это сохранить имя пользователя и пароль в вас сессии (или другая форма постоянного хранения):

index.php после session_start();

if (isset($_POST['username']) && isset($_POST['password'])) { 
    $_SESSION['username'] = $_POST['username']; 
    $_SESSION['password'] = $_POST['password']; 
} 

Тогда в logout.php вы можете быть в состоянии очистить эти значения с помощью $_SESSION суперглобальном вместо $_POST.

Кстати, я действительно не знаю, почему вы должны указывать имя пользователя и пароль как файлы cookie, но это не относится к вашему вопросу.

Смежные вопросы