Setcokie в Javascript Нужна помошь Срочно =)

Discussion in 'PHP' started by Whois, 15 Jul 2009.

  1. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    Всем привет, заранее буду признателен за помошь.

    Вобщем мне нужно было задать временные куксы, для теста время жизни взял 10 секунд.
    На php реализовал это следующим образом:
    PHP:
     setcookie("temporary","blablalbla",time()+10);
    Все хорошо, все работает. Но только в том случае!, КОгда Время на сервере такое е же как и у пользователя на компе. В противном случае будет задан пирожок с неправильным временем жизни.

    Чтобы узнать время пользователя пришлось воспользовался javascript. В яваскрипте есть функция gettime - аналог time на php.
    Передать переменную из явы в пхп можно (на сколько мне известно) 3 способами:
    1. гет запрос
    2 пост запрос
    3 установить куки
    Первые два варианта сразу отбрасываю, т к они требуют обновления страница, остается 3. Гораздо легче задать куки через яву. Собственно тут я и столкнулся спроблемой.
    Ниже приведу код:


    PHP:

    <SCRIPT LANGUAGE="JavaScript">
    function 
    setCookie (namevalueexpirespathdomainsecure) {
          
    document.cookie name "=" escape(value) +
            ((
    expires) ? "; expires=" expires "") +
            ((
    path) ? "; path=" path "") +
            ((
    domain) ? "; domain=" domain "") +
            ((
    secure) ? "; secure" "");
    }
    </SCRIPT>

    <SCRIPT LANGUAGE="JavaScript">
    setCookie("foo", "bar", "Mon, 01-Jan-2010 00:00:00 GMT", "/");
    </SCRIPT>

    В данном примере в переменной время (expires) нужно указать точное число, а мне же нужно чтобы куки устанавливалось на определенное колиичетсво секунд. Как это сделано в php time()+ секунды. В этом вся и загвостка. Моих знаний не хватает. Буду признателен за помош
     
  2. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    ап ап ап =(((
     
  3. n0reply

    n0reply New Member

    Joined:
    31 Mar 2009
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    PHP:
    <html>
    <
    head></head>
    <
    body>
     <
    SCRIPT LANGUAGE="JavaScript">
      var 
    = new Date( (new Date()).getTime() + 10000 );
      
    document.write(d.toString());
     
    </SCRIPT>
    </body>
    </html>
    в d будет хранитсья текущая дата клиента + 10 секунд. (getTime() в милисекундах).
     
  4. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    А СПАСИБО ВЕРИ МАЧ =) ЩАС БУДУ ПРОБОВАТЬ
     
  5. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    чувствуя себя нубом, не могу все совсместить воедино... Нелюблю я яву...может кто поможет?

    я делаю так:

    PHP:

     
    <SCRIPT LANGUAGE="JavaScript">
    function 
    setCookie (namevalueexpirespathdomainsecure) {
          
    document.cookie name "=" escape(value) +
            ((
    expires) ? "; expires=" expires "") +
            ((
    path) ? "; path=" path "") +
            ((
    domain) ? "; domain=" domain "") +
            ((
    secure) ? "; secure" "");
    }
    </SCRIPT>

     <SCRIPT LANGUAGE="JavaScript">
      var d = new Date( (new Date()).getTime() + 10000 );
      setCookie("test111", "bar", "d.toString()", "/");
     </SCRIPT>



    кукис задается но без времени
     
  6. n0reply

    n0reply New Member

    Joined:
    31 Mar 2009
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    а так:
    PHP:
     <SCRIPT LANGUAGE="JavaScript">
    function 
    setCookie (namevalueexpirespathdomainsecure) {
          
    document.cookie name "=" escape(value) +
            ((
    expires) ? "; expires=" expires "") +
            ((
    path) ? "; path=" path "") +
            ((
    domain) ? "; domain=" domain "") +
            ((
    secure) ? "; secure" "");
    }
    </SCRIPT>

     <SCRIPT LANGUAGE="JavaScript">
      var d = new Date( (new Date()).getTime() + 10000 );
      setCookie("test111", "bar", d.toString(), "/");
     </SCRIPT>  
     
  7. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    http://i043.radikal.ru/0907/1c/3bb54faaf3f0.jpg Аналагично, время не задается пачемуТО
     
    #7 Whois, 15 Jul 2009
    Last edited: 15 Jul 2009
  8. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    AJAX не рулед?
    JS выставлять куки - извращение
     
  9. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    рулед все.... покажите мне готовое решение... Я сам знаю много способов но силен только в php.... Так что обращаюсь за помощью к вам
     
  10. n0reply

    n0reply New Member

    Joined:
    31 Mar 2009
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    d.toString() я тебе для примера сверху написал, чтобы просто на экран дату вывести, плюс ты ее в кавычки зачем-то заслал.

    Видимо проблема с форматом даты в котором выводит ее toString(), возможно этот момент броузро-зависим, проверил щас твой код на FireFox'e, в линуксе, все работает и дата задается.

    Попробуй поэксперементируй, вместо toString(): toGMTString(), toLocaleString(), toUTCString(). Вообще посравнивай как твоя опера дату распечатывает. Я так понял
    "Mon, 01-Jan-2010 00:00:00 GMT"
    с таким вариантом все работает, посмотри насколько toString() от него отличается? Возможно в разных броузерах и вывод будет разный (или даже в разны ОС), и возможно прибется форматировать эту строку вручную строковыми функциями.
     
  11. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    К примеру так

    Вызов на странице функции test
    Code:
    function Inint_AJAX() 
    {  
      try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {} //IE
      try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} //IE
      try { return new XMLHttpRequest();                   } catch(e) {} //Native Javascript
      alert("XMLHttpRequest not supported");
      return null;
    }
    
    function test(параметры) 
    {
      var type = document.getElementById("type"); 
      var url = 'modules/test.php?what=' + type.value;
    
      var req = Inint_AJAX();
    
      req.onreadystatechange = function ()
      {
        if (req.readyState == 4) 
        {
          if (req.status == 200) 
          {
            var text = req.responseText.toString(); //return value
            //Выполнение действия с результатом php ответа text
          }
        }
      };
       
    
      req.open('GET', url, true); //make connection
      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=cp1251'); // set Header
      req.send(null); //send value
    }
    
    test.php
    Code:
    <?php
    
    If ($_GET['type'])
    }
      echo($_GET['type']); //Отправка AJAX'у ответ
    }
    ?>
    
     
    #11 FireFenix, 15 Jul 2009
    Last edited: 23 Jul 2009
  12. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    n0reply - спасибо что не поленился все рассказать буду эксперементировать. Хотя уже понимаю из вышесказанного что этот способ будет не оптимальным, а мне нужна хотябы 99% работоспособность.
    PS Если ктонибудь знает еще способы по заданию кукисов с использованием реального форматама времени пользователя + добавление секунд жизни, пожалуйста отписывайтесь здесь.
     
    1 person likes this.
  13. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    Спасибо за помошь. Всем по Плюсику.

    n0reply в опере заработала используя toGMTString() , щас попробую метод Феникса. Думаю пост можно закрывать.
     
  14. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Я думаю догодаешься адаптировать
    Code:
      var type = document.getElementById("type"); 
      var url = 'modules/test.php?what=' + type.value;
    
    под свои нужды =)

    P.S. Если нужно, вот нарыл у себя готовый пример - http://rapidshare.com/files/256201845/user-proofing-ajax.zip.html
     
    #14 FireFenix, 15 Jul 2009
    Last edited: 15 Jul 2009
  15. n0reply

    n0reply New Member

    Joined:
    31 Mar 2009
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    Проверил твой JS вариант (с toGMTString() ) на FireFox'e (в линухе), тоже все работает, скорее всего просто FF по умолчанию время выводит в GMT формате, наверное и в других броузерах будет работать, если ты в винде, то на IE проверить не долго.
     
  16. n0reply

    n0reply New Member

    Joined:
    31 Mar 2009
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    Как еще один вариант, попробуй обойтись вообще без JS, чистым пхп, примерно так:
    PHP:
    <?php
    function set_cookie($Name$Value ''$MaxAge 0$Path ''$Domain ''$Secure false$HTTPOnly false) {
      
    header('Set-Cookie: ' rawurlencode($Name) . '=' rawurlencode($Value)
                            . (empty(
    $MaxAge) ? '' '; Max-Age=' $MaxAge)
                            . (empty(
    $Path)   ? '' '; path=' $Path)
                            . (empty(
    $Domain) ? '' '; domain=' $Domain)
                            . (!
    $Secure       '' '; secure')
                            . (!
    $HTTPOnly     '' '; HttpOnly'), false);
    }

    # examples:
    set_cookie("test111""bar"10);  /* через 10 секунд  кончитсья */
    set_cookie("TestCookie""value"3600"/~rasmus/"".example.com"1);
    ?>
    по http://www.faqs.org/rfcs/rfc2109.html у Set-Cookie (заголовка) есть параметр Max-Age=delta-seconds. Который задает интервал жизни куки в секундах.
     
  17. Whois

    Whois Banned

    Joined:
    5 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    Отлично =) Думаю самый лучший вариант, $MaxAge - решение всех проблем, никогда не слышал о нем раньше
     
    #17 Whois, 16 Jul 2009
    Last edited: 16 Jul 2009