Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.06.2010, 22:48
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

Cookies и ошибка клиента 400 Bad Request
Нужна ваша помощь. Отчего может возникать данная ошибка?

Использую чужой скрипт для корзины в интернет магазине. Содержимое корзины хранилось в одном куке, но из-за этого беспокоило известное ограничение на 4 кб. Я сделал так что при заполнении куки на сколько-то символов, скрипт пишет в следующую. При чтении соответственно объединяет.

Тем не менее, при общем объеме корзины более 4кб символов перестают грузиться страницы - показывает ошибку "400 Bad Request". Странно то, что разбиение/объединение куков работает корректно: я ставил ограничение наполнения в 500 символов, т.е. скрипт писал и считывал успешно из 8 разных куков, однако если добавить еще немного товаров в корзину, т.е. несколько превысить 500*8 - страницы начинают грузиться с ошибкой 400, если убрать обратно - все снова работает.

Из-за чего вообще это может быть? Вряд ли это ошибка в js коде, ведь это сервер шлет 400-й привет, но тем не менее вот мои функции, вдруг что-то прояснят:

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	
	for (var x=0; x<9; x++)  
		document.cookie = name+x+"=" + value.substr(1000*x,1000) + expires + "; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=", returnstring = "", ca;
	for (var x=0; x<9; x++) { 
	nameEQ = name + x + "=" ; ca = document.cookie.split(';');
		for (var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) === 0) returnstring = returnstring + c.substring(nameEQ.length,c.length);
		}
	}
	return returnstring;
}
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2010, 23:18
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

а погуглить слабо?
насколько я понял по гуглу, проблема возникает на веб-сервере nginx, при большом суммарном размере кук
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2010, 09:35
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

Видимо гуглить не умею - не находил этой информации. Спасибо, Gvozd
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2010, 09:49
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

ну, это результат анализа результатов гугления.
напрямую-то так там нигде не сказано, ибо все вопросы были с юзерской точки зрения "как мне зайти на любимый сайт"
вот, походу решение проблемы:
http://www.ruby-forum.com/topic/173362

PS в любом случае помни, что куки не безграничны, и ограничиваются самим браузером, поэтому в них лучше хранить минимум инфы

Последний раз редактировалось Gvozd, 02.06.2010 в 09:54.
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2010, 13:06
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Roman-NN
Я сделал так что при заполнении куки на сколько-то символов, скрипт пишет в следующую.
Ограничение делается не на одну куку, а на все у текущего домена. Поэтому разбиение ничего не даёт.

А ошибка, потому что http-заголовки получаются слишком большие, nginx их не переваривает.

А проблема в том, что хранение корзины в куках -- не лучшая идея.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск