Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Bad Request при использовании Cookies (js)

3.2K
16 августа 2010 года
Гудвин
186 / / 22.12.2007
Здравствуйте. Использую следующие функции

Код:
function setCookie(name, value, expires, path, domain, secure)
{
    if (!name || !value)
        return false;
    var str = encodeURIComponent(value);
        var i=0;
    var id=0;
    var s="";
    var n=str.length;
    while(i<n)
    {
        s=name+"["+id+"]="+str.substr(i,4000);
        i=i+4000;
        id=id+1;
        if (expires) s += '; expires=' + expires.toGMTString();
        if (path)    s += '; path=' + path;
        if (domain)  s += '; domain=' + domain;
        if (secure)  s += '; secure';
        document.cookie = s;
    }
    s=name+"_count="+id;
    if (expires) s += '; expires=' + expires.toGMTString();
    if (path)    s += '; path=' + path;
    if (domain)  s += '; domain=' + domain;
    if (secure)  s += '; secure';
    document.cookie = s;
    return true;
}

function getCookie(name) {
    var s="";
    var sid=get_Cookie(name+"_count");
    if(sid=="") return false;
    var id=parseInt(sid);  
    var i=0;
    var str="";
    for(i=0;i<id;i=i+1)
    {
        str=get_Cookie(name+"["+i+"]");
        s=s+str;
    }
    return decodeURIComponent(s);
}


function get_Cookie(c_name)
{
if (document.cookie.length > 0)
    {
    c_start=document.cookie.indexOf(c_name + "=");
    if (c_start!=-1)
        {
        c_start=c_start + c_name.length+1;
        c_end=document.cookie.indexOf(";",c_start);

        if (c_end==-1) c_end=document.cookie.length;

        return document.cookie.substring(c_start,c_end);
        }
    }
return null;
}


function deleteCookie(name, path, domain) {
    setCookie(name, null, new Date(0), path, domain);
    return true;
}

function initPage(){
    var s="";
    oSelNode = null;
//set beingLoadedNode to the tree container
    beingLoadedNode = document.getElementById("Tree");
    s=getCookie('treeajaxsafe');
    if(s==null || s=='' || s=='false')
    {
        processLoading(sRootTree);
    }
    else
    {
        beingLoadedNode.innerHTML=s;
    }
}


при загрузке с сервера нового узла все дерево пересохраняется в куки, но если количество сохраняемых символов больше 5000 то при следующей перезагрузке страницы выдается ошибка, вполть пока браузер не будет перезапущен, или не будут удалены куки:
400 Bad Request
Your browser sent a request that this server could not understand.

что это может быть?
253
16 августа 2010 года
Proger_XP
1.5K / / 07.08.2004
Может быть ограничением на длину заголовка (куки пересылаются в заголовке). Вообще, не лучшая идея по-моему держать такие длинные данные в куки. В HTML 5 для этого ввели локальные хранилища, почитайте, скорее всего это то, что вам нужно.
3.2K
16 августа 2010 года
Гудвин
186 / / 22.12.2007
:oда, малость подзабыл теорию:
Цитата:
Хранилище DOM может предоставить значительно больше дискового пространства, чем файлы Cookie. В Internet Explorer в файлах Cookie можно сохранить только 4 КБ данных. Это может быть одна пара имя-значение объемом 4 КБ или до 20 пар имя-значение общим объемом 4 КБ. В хранилище DOM предоставляется приблизительно 10 МБ для каждой области хранения.

13
16 августа 2010 года
RussianSpy
3.0K / / 04.07.2006
Только не забудьте про кроссбраузерность - она тут малость хромает (это не от слова Chrome)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог