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;
}
}
Bad Request при использовании Cookies (js)
Код:
при загрузке с сервера нового узла все дерево пересохраняется в куки, но если количество сохраняемых символов больше 5000 то при следующей перезагрузке страницы выдается ошибка, вполть пока браузер не будет перезапущен, или не будут удалены куки:
400 Bad Request
Your browser sent a request that this server could not understand.
что это может быть?
Может быть ограничением на длину заголовка (куки пересылаются в заголовке). Вообще, не лучшая идея по-моему держать такие длинные данные в куки. В HTML 5 для этого ввели локальные хранилища, почитайте, скорее всего это то, что вам нужно.
Цитата:
Хранилище DOM может предоставить значительно больше дискового пространства, чем файлы Cookie. В Internet Explorer в файлах Cookie можно сохранить только 4 КБ данных. Это может быть одна пара имя-значение объемом 4 КБ или до 20 пар имя-значение общим объемом 4 КБ. В хранилище DOM предоставляется приблизительно 10 МБ для каждой области хранения.
Только не забудьте про кроссбраузерность - она тут малость хромает (это не от слова Chrome)