Я в отчаянии. Пробовал все, чтобы выйти из системы с моей страницы PHP, но она не работает, корзина покупок все еще заполнена, а имя пользователя все еще там. Моя веб-страница посвящена онлайн-покупкам. Логин работает нормально, и я создал файл выхода со следующим кодом
session_start();
session_destroy();
header('Location: login.php');
exit;
Мой код входа:
// get Members table
require './Model/Members.php';
$memberTable = new Members();
if (isset($_POST['data'])) {
// take security precautions: filter all incoming data!
$email = (isset($_POST['data']['email'])) ? strip_tags($_POST['data']['email']) : '';
$password = (isset($_POST['data']['password'])) ? strip_tags($_POST['data']['password']) : '';
if ($email && $password) {
$result = $memberTable->loginByName($email, $password);
if ($result) {
// store user info in session
$_SESSION['membro'] = $result;
$_SESSION['login'] = TRUE;
}
else {
$_SESSION['login'] = FALSE;
}
// redirect back home
header('Location: ?page=paginaprincipal');
exit;
}
}
мой HTML со страницы входа в систему:
<div class="content">
<br/>
<div class="product-list">
<h2>Login</h2>
<br/>
<b>Por favor, entre a sua informacao.</b><br/><br/>
<form action="?page=login" method="POST">
<p>
<label>Email: </label>
<input type="text" name="data[email]" />
<p>
<p>
<label>Password: </label>
<input type="password" name="data[password]" />
<p>
<p>
<input type="reset" name="data[clear]" value="Clear" class="button"/>
<input type="submit" name="data[submit]" value="Submit" class="button marL10"/>
<p>
</form>
</div><!-- product-list -->
</div>
Пожалуйста, помогите мне определить, что я делаю не так. Я пробовал много разных вещей отсюда, но ни одна из них не работает, и мне нужно, чтобы эта работа была выполнена как можно скорее, поэтому мое разочарование 🙁
Есть ли вероятность, что что-то было сохранено в куки? Если так, попытайтесь прояснить их также.
Как очистить их всех:
как удалить все куки моего сайта в php
Небольшое руководство: http://www.pontikis.net/blog/create-cookies-php-javascript
Для страницы выхода из системы это должно быть сделано.
session_start();
unset( $_SESSION['membro'] );
unset( $_SESSION['login'] );
/* cookies should be deleted when the session is destroyed anyway */
setcookie( session_id(), "", time() - 3600 );
session_unset();
session_destroy();
session_write_close();
session_start();
session_regenerate_id( true );
exit( header('Location: login.php') );
В ответ на ваши комментарии о том, что он все еще не работает, я переписал часть вашего кода следующим образом и протестировал с использованием кода выше (хотя я эмулировал $memberTable->loginByName
с некоторыми статическими значениями, и это сработало. Каждый раз сеанс полностью разрушался, а новый создавался заново, поэтому я не уверен, что проблема заключается в сценарии выхода из системы. Если это не поможет, возможно, стоит cache-control
заголовки устанавливаются
<?php
require './Model/Members.php';
$memberTable = new Members();
if( isset( $_POST['data'] ) ) {
$data=$_POST['data'];
$email=isset( $data['email'] ) && !empty( $data['email'] ) ? trim( strip_tags( filter_var( $data['email'], FILTER_SANITIZE_EMAIL ) ) ) : false;
$password=isset( $data['password'] ) && !empty( $data['password'] ) ? trim( strip_tags( filter_var( $data['password'], FILTER_SANITIZE_STRING ) ) ) : false;
if ( $email && $password ) {
$result = $memberTable->loginByName( $email, $password );
if ( $result ) {
$_SESSION['membro'] = $result;
$_SESSION['login'] = TRUE;
} else {
$_SESSION['login'] = FALSE;
}
exit( header('location: ?page=paginaprincipal') );
}
}
?>