За последние 24 часа нас посетил 22761 программист и 1573 робота. Сейчас ищут 1024 программиста ...

Не работает logout() через javascript

Тема в разделе "PHP для новичков", создана пользователем Сереганек, 12 фев 2017.

  1. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    На кнопку повесил функцию logout() на onclick. При клике должна удаляться кука и обновляться страница. Страница обьновляется, но кука не удаляется. Как это починить?
    Код (Javascript):
    1. <!DOCTYPE html>
    2.     <head>
    3.         <meta charset="UTF-8">
    4.         <title></title>
    5.         <script type="text/javascript">
    6.             function deleteCookie(name) {
    7.                 var date = new Date();
    8.                 date.setTime(date.getTime() - 1);
    9.                 document.cookie = name += "=; expires=" + date.toGMTString();
    10.              }
    11.        
    12.             function logout() {  
    13.                 deleteCookie("Auth");
    14.                 location.reload();
    15.             }
    16.         </script>
    17.         <link rel="stylesheet" type="text/css" href="/mysql.ua/css/style.css">
    18.         <link rel="shortcut icon" href="/mysql.ua/img/favicon.ico">
    19.     </head>
    20.     <body>
    21.     <div class="autorize">
    22.         <div>
    23.             <?php
    24.                 if (empty ($_COOKIE['Auth']))
    25.                 {
    26.                     echo '<span>Вы не авторизованы на сайте</span>';
    27.                 }
    28.                 else
    29.                 {
    30.                     echo '<table class="auth"><tbody><tr><td>Вы авторизованы на сайте как: <strong>'.$row["login"].'</strong></td><td><input type="submit" value="Выход" class="sh" onclick="logout()"></td></tr></tbody></table>';
    31.                 }
    32.             ?>
    33.         </div>
    34.     </div>
    В данном случае на лучшее решение я не претендую. Мне просто нужен простейший рабочий вариант.
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Попробуй,должно заработать
    Код (Javascript):
    1.             function deleteCookie(name) {
    2.                  document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
    3.              }
    4.      
    5.             function logout() {
    6.                 deleteCookie("Auth");
    7.                 location.reload();
    8.             }
     
    Сереганек нравится это.
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    У куки не установлен, случайно, маркер "HTTP only"?
     
    Сереганек нравится это.
  4. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Код (Javascript):
    1. document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
    Этот вариант аналогично предыдущему: кука остается.
    Нет, установлен маркер "Host only"
     
  5. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Может как-то через php это лучше сделать?
     
  6. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Сереганек нравится это.
  7. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Проблема в том, что если я добавляю php-функцию в код индексной страницы, то при ее вызове получаю ошибку:
    Uncaught ReferenceError: logout is not defined
    И это понятно, ведь на стороне клиента уже нет никакого php. А клик по кнопке делает пользователь. Получается нужно отправлять запрос на сервер и оттуда удалять куку. Но тогда мне как-то нужно вернуться на текущую страницу (или как-то остаться на ней).
    У меня получалось отправить запрос, обработать его и сгенерировать новую страницу с результатами. А вот как вернуться на исходную страницу и, например, удалить кнопку логаута после того как кука будет удалена? Это уже вероятно ajax? Попроще никак нельзя?
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    header: location в помощь.
     
    Сереганек нравится это.
  9. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Получилось через запрос и строку:
    PHP:
    1. header ("Location: ".$_SERVER['HTTP_REFERER']);
    Всем спасибо!
     
    Fell-x27 нравится это.
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    не доверяй HTTP_REFERER, его могут подменить и пользователь уйдёт на чужой сайт
     
  11. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    1) сессионные куки нельзя редактировать javascript
    2) делай через ajax. Нет ничего проще. Просто когда вернется ответ делаешь рефреш javascript'ом
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Зависит от настроек php.
     
    valentinnew и alexblack нравится это.