1

Тема: Не працюють сookie

Привіт. Якщо починати з самого кінця то хочу написати код для сайта щоб перевіряти чи відвідувач який зайшов на сайт був на ньому протягом останьої години і якщо його не було, то відкриваєм йому нове вікно в браузері з іншою сторінкою. Для цього вирішив використовувати сookie.

        <?php
            SetCookie("user","true",time()+3600);
        ?>
        <script>
            if($_COOKIE['user'] == "true")
            {
                alert("user have cookie.");
            } else {
                alert("user have not cookie.");
            }
        </script>

код не працює зовсім, випливає питання... чому?(

2

Re: Не працюють сookie

стапе... не то написав

3

Re: Не працюють сookie

всеодно не працює

        <?php
            SetCookie("user","true",time()+3600);
        ?>
        <script>
        alert($_COOKIE['user']);
            if(<? echo $_COOKIE['user']; ?> == "true")
            {
                alert("user has cookie.");
            } else {
                alert("user does not have cookie.");
            }
        </script>
Подякували: 221VOLT1

4 Востаннє редагувалося 221VOLT (25.12.2016 00:38:28)

Re: Не працюють сookie

у вас мішанина з php та js

ви спочатку виведіть в js значення з php


не

<script>
alert($_COOKIE['user']);

а

<script>
alert(<?=$_COOKIE['user']; ?>);

а перед тим - включіть вивід всіх помилок php

Подякували: Kasper1

5

Re: Не працюють сookie

зробив на js

<script type="text/javascript">

  //function deleteCookie(name) {
  //  var date = new Date(); // Берём текущую дату
  //  date.setTime(date.getTime() - 1); // Возвращаемся в "прошлое"
  //  document.cookie = name += "=; expires=" + date.toGMTString(); // Устанавливаем cookie пустое значение и срок действия до прошедшего уже времени
  //}
  
      function getCookie(name) {
        var r = document.cookie.match("(^|;) ?" + name + "=([^;]*)(;|$)");
        if (r) return r[2];
        else return "";
      }
          
    if(getCookie("userCookie") != "true")
    {
        window.open("http://house-build.org");
        setCookie("userCookie", "true"); // Устанавливаем cookie
        function setCookie(name, value) {
        document.cookie = name + "=" + value;
          }
          function getCookie(name) {
            var r = document.cookie.match("(^|;) ?" + name + "=([^;]*)(;|$)");
            if (r) return r[2];
            else return "";
          }
    }
    else
    {
            alert("false");
    }
  //deleteCookie("firstname"); // Удаляем cookie
  //alert(getCookie("firstname")); // Убеждаемся, что ничего не осталось
</script>

6

Re: Не працюють сookie

є поправочка, якщо не помиляюсь -
ви не зможете працювати з кукою з js,
якщо вона встановлена з сервера з параметром Secure та HttpOnly

Подякували: Kasper1

7

Re: Не працюють сookie

Щоб не створювати подібну тему пишу сюди. Знову вертаюся до куків в браузері, а саме до їх видалення після визначеного часу. Читав що куки видаляються коли закриваєш браузер,  і це взагалі було б чудово, але нажаль хром і ще якись там браузер не знає про це і продовжуєїх зберігати. Тому потрібно вказувати дату коли створюєш куки. Проблема в тому що і так чомусь не хоче видаляти. Гляньте, може я щось не то написав:

  <script>
 
     function getCookie ( cookie_name )
    {
      var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
     
      if ( results )
        return ( unescape ( results[2] ) );
      else
        return null;
    }
    
    
    function create_cookie(name, value, expday, path) {
      var date = new Date();
      date.setTime(date.getTime() + (expday * 24 * 60 * 60 * 1000));
      var expires = date.toUTCString();
      document.cookie = name + '=' + value + ';' +
                       'expires=' + expires + ';' +
                       'path=' + path + ';';
    }

    
    function return_cookie(name) {
      var cookie_value = "",
        current_cookie = "",
        name_expr = name + "=",
        all_cookies = document.cookie.split(';'), 
        n = all_cookies.length;
     
      for(var i = 0; i < n; i++) {
        current_cookie = all_cookies[i].trim();
        if(current_cookie.indexOf(name_expr) == 0) {
          cookie_value = current_cookie.substring(name_expr.length, current_cookie.length);
          break;
        }
      }
      return cookie_value; 
    }
    
    function second_passed()
    {
            document.getElementById("parent_popup").style.display = "inline";
    }

    window.onload = function() {
        var cookie_name = 'userCookie';
        var mycookie = return_cookie(cookie_name);

        if(!(mycookie))
        {        
            create_cookie("userCookie", "true", 1, "/");
            setTimeout(second_passed, 2000)
            
        } else {
            //alert("Реклама уже відображалася!");
        }
    };
  

    
    
</script>

8

Re: Не працюють сookie

Я не дуже зрозумів до чого тут видалення куків? Ви можете перевіряти  - чи вони не застарілі - та встановлювати нові (якщо це можливо). Але ніхто не гарантує вам що хтось буде їх видаляти (навіть ви) - ви можете встановити нову куку, якщо стара  - застаріла. Чи я щось не те зрозумів?

9

Re: Не працюють сookie

Загалом я намагаюся реалізувати наступне...
Щоб відвідувачу мого сайту тільки 1 раз на 24год викликалася функція:

 function second_passed()
    {
            document.getElementById("parent_popup").style.display = "inline";
    }

Для цього я використовую куки щоб запамятовувати що відвідувач уже заходив на сайт. Тому і потрібно щоб вони не висіли вічно, а видалялися по закритті браузера, або за 24год

10

Re: Не працюють сookie

https://codepen.io/keey/pen/RopOVK

Подякували: Kasper1