Функция Cookie Javascript не работает для домена - PullRequest
0 голосов
/ 07 мая 2010

Вот функции, которые я использую:

Набор Cookie:

function set_cookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure )
{
  var cookie_string = name + "=" + escape ( value );

  if ( exp_y )
  {
    var expires = new Date ( exp_y, exp_m, exp_d );
    cookie_string += "; expires=" + expires.toGMTString();
  }

  if ( path )
        cookie_string += "; path=" + escape ( path );

  if ( domain )
        cookie_string += "; domain=" + escape ( domain );

  if ( secure )
        cookie_string += "; secure";

  document.cookie = cookie_string;
}

Чтение Cookie:

function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );

  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
}

Удалить Cookie:

function delete_cookie ( cookie_name )
{
  var cookie_date = new Date ( );  // current date & time
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}

Jquery, который я использую для создания cookie:

    if(get_cookie('visible')== 'no') {
        $("#wrapper").hide();
        $(".help").hide();
        $("#slid .show").show();
        $("#slid .hide").hide();
        } else {
            $("#slid .show").hide();
            $("#slid .hide").show();
        }
    $("#slider").click(function() {
        if(get_cookie('visible')== null) {
            set_cookie('visible','no', 2020, 01,01, '/', 'domain.com');
        } else {
            delete_cookie('visible');
        }
            $(".help").slideToggle();
                $("#wrapper").animate({ opacity: 1.0 },200).slideToggle(200, function() {
                    $("#slid img").toggle();
                });
    });

Я пытаюсь установить cookie для всех страниц, которые существуют в domain.com с путем '/'.

Однако, используя эти функции и jQuery, похоже, он не работает, кто-нибудь подскажет, где я не так?

1 Ответ

0 голосов
/ 07 мая 2010

Работает для меня, если domain совпадает или отсутствует, и в domain или path нет ничего, что искажается escape().

(Вы не должны использоватьescape() для параметров cookie: для них нет стандартной схемы экранирования. Обычно плохая идея использовать escape() / unescape() для что угодно ; это нестандартная схема кодирования, которая нето же самое, что и URL-кодирование, поэтому, если вы попытаетесь прочитать cookie с какого-либо другого языка, например PHP, вы не сможете правильно его декодировать, используя любую встроенную функцию. Если вам нужна реальная кодировка URL для самих значений cookie, перейдите к encodeURIComponent / decodeURIComponent, хотя, опять же, они все еще не используются для параметров cookie.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...