куки не удаляются - PullRequest
       2

куки не удаляются

2 голосов
/ 15 апреля 2011

У меня есть базовая система входа в систему. Основные функции входа / выхода из системы следующие:

function login() {
    global $page;

    if ($_COOKIE['adminUser'] == adminUser && $_COOKIE['adminPass'] == adminPass):
        $_SESSION['adminLogin'] = true;
        redirect($_SERVER['REQUEST_URI']);
    elseif ($_POST['adminUser'] == adminUser && $_POST['adminPass'] == adminPass):
        setcookie('adminUser', $_POST['adminUser'], time() + 60 * 60 * 24 * 7);
        setcookie('adminPass', $_POST['adminPass'], time() + 60 * 60 * 24 * 7);
        $_SESSION['adminLogin'] = true;
        redirect($_SERVER['REQUEST_URI']);
    else:
        $page->content->table = new template('admin/login.tpl');
        // it shows the login form
    endif;
}

    function logout() {
        $_SESSION['adminLogin'] = false;
        setcookie('adminUser', false, time() - 60*100000);
        setcookie('adminPass', false, time() - 60*100000);
        redirect(pathApp);
    }

redirect($x) - это header("Location: $x"); die;.

Никакие другие COOKIES не устанавливаются нигде во всем сценарии.

Проблема в том, что функция выхода из системы не работает. Я попытался отладить это через Firebug, чтобы посмотреть, какие заголовки отправляются, и все мне кажется нормальным. Вот журнал Firebug для выхода из системы:

Response Headers

HTTP/1.1 200 OK
Date: Fri, 15 Apr 2011 18:48:57 GMT
Server: Apache
X-Powered-By: PHP/5.2.13
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: adminUser=deleted; expires=Thu, 15-Apr-2010 18:48:56 GMT
adminPass=deleted; expires=Thu, 15-Apr-2010 18:48:56 GMT
Content-Length: 1041
Connection: close
Content-Type: text/html


Request Headers

GET /freeads/admin/logout HTTP/1.1
Host: clienti.bsorin.ro
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://clienti.bsorin.ro/freeads/admin
Cookie: adminUser=q; adminPass=q; PHPSESSID=22faf6e20467b88d97dc7838572cbd47

Сценарий действителен по адресу http://clienti.bsorin.ro/freeads/admin. Имя пользователя и пароль установлены на «q».

спасибо!

Ответы [ 4 ]

16 голосов
/ 17 апреля 2011

Похоже, что система имела недостатки с самого начала, потому что я неправильно настроил куки. Я не использовал параметр path. Файлы cookie были установлены на /path/login и были удалены на path/logout.

Правильный способ был бы изменить обе пары команд setcookie() (вход и выход) на:

setcookie('adminUser', $_POST['adminUser'], time() + 60 * 60 * 24 * 7, '/');
setcookie('adminPass', $_POST['adminPass'], time() + 60 * 60 * 24 * 7, '/');

setcookie('adminUser', false, time() - 60*100000, '/');
setcookie('adminPass', false, time() - 60*100000, '/');

Обратите внимание, что четвертый параметр, path, устанавливается на /. Это заняло у меня некоторое время, но я понял это:).

3 голосов
/ 18 августа 2011

Я заметил, что вы используете поддомен.У setCookie есть пятый параметр, который будет указывать домен.Это сложно с поддоменами, чтобы удалить куки.Это сработало для меня

setCookie("clockInTime", $param, date('U')+86502,'/', '.mywebsite.com')

Последний параметр подберет любые и все субдомены моего сайта, используя '.'до домена.

0 голосов
/ 19 января 2017

Вы можете изменить время истечения срока действия cookie, используя setcookie ().

Важно: Время истечения срока действия cookie должно быть обновлено до того, как какие-либо данные будут отправлены в браузер, поскольку браузер идентифицирует cookie и сохраняет его на основеЗаголовки отправляются с сервера в браузер, поэтому вы должны использовать setcookie () перед заголовками для обновления срока действия cookie

0 голосов
/ 15 апреля 2011
  1. убедитесь, что вы не отправляете заголовки перед использованием setcookie.
  2. измените ваши условные выражения на использование фигурных скобок (прошу вас)
  3. убедитесь, что вы устанавливаете куки /удаляя их в том же домене (и пути), попробуйте использовать setcookie($name, $val, $time, '/');

Я вижу следующую ошибку при выходе из системы.

ОТЛАДКА: [class_dispatcher.php: 26] [scalar [integer / float / string / boolean]] page-> content не относится к классу 'template'

Это наиболее вероятная причина- как он выводится ДО вызова setcookie.

...