Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   зацикивются cookies в IE (https://javascript.ru/forum/css-html-internet-explorer/14091-zacikivyutsya-cookies-v-ie.html)

Roman-NN 29.12.2010 04:11

зацикивются cookies в IE
 
Ума не приложу почему.

Корзина интернет магазина сохраняет id и количества товаров в кукисах браузера. Везде все отлично, кроме ослика - сначала работал, но с некоторых пор он просто игнорирует setCookie чем вводит меня в ступор. Выглядит так, будто его зацикливает на конкретном значении, то есть устанавливаешь новое значение, делаешь гет - возвращается старое(

Если очистить кукисы вручную, то он снова начинает работать исправно, но, через некоторое время, вновь берется за старое.

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

Прошу, развейте эту магию!

Как сохраняю и читаю куки (тестовый документ, на котором я надеялся ловить баг. Используется библиотечка с вашего сайта, из "10 лучших..."):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Cookie test</title>
<script type="text/javascript">
function getCookie(name) {
	var matches = document.cookie.match(new RegExp(
	  "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
	))
	return matches ? decodeURIComponent(matches[1]) : '' 
}

// уcтанавливает cookie
function setCookie(name, value, props) {
	props = props || {}
	var exp = props.expires
	if (typeof exp == "number" && exp) {
		var d = new Date()
		d.setTime(d.getTime() + exp*1000)
		exp = props.expires = d
	}
	if(exp && exp.toUTCString) { props.expires = exp.toUTCString() }

	value = encodeURIComponent(value)
	var updatedCookie = name + "=" + value
	for(var propName in props){
		updatedCookie += "; " + propName
		var propValue = props[propName]
		if(propValue !== true){ updatedCookie += "=" + propValue }
	}
	document.cookie = updatedCookie

}

// удаляет cookie
function deleteCookie(name) {
	setCookie(name, null, { expires: -1 })
}
</script>
</head>
<body>


<script>
	alert('Cookies test 2') 
	setCookie ('SSCart', '', {expires:120})
	 
	while (confirm('test = ' + getCookie('SSCart')))
	{
		setCookie ('SSCart', getCookie('SSCart') + '---------0', {expires:120})
	}
</script>


</body>
</html>


PS: проблема не только на моем ИЕ, другие тоже ее видят! я не псих!!!1

Matre 07.01.2011 20:21

Цитата:

/([\.$?*|{}\(\)\[\]\\\/\+^])/
что это за бред? набор символов..как оно скомпилилось ума неприложу
уберите все эти закорючки и все запуститься

Vulkan 07.01.2011 20:23

Matre, это регулярное выражение (RegExp)

Matre 07.01.2011 20:30

регулярные выражения??
вы случайно не троль?
несете какуюто ахинею.
реги я видел в perl, в malbolge и в php но в java script их нет!

если я ва с неубедил то почему не раьотает код:
print $my =~ s/123/456/g;
ну?

Vulkan 07.01.2011 20:34

Чувак, во первых malbolge эзотерический язык программирования, там нет регулярок, во вторых вот тебе реги в js, а не сработает приведённый код в js, потому что это код Perl.
P.s. Вот это на malbolge не регулярка:
Цитата:

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
Это программа Hello World))

Matre 07.01.2011 20:38

Цитата:

malbolge эзотерический язык программирования, там нет регулярок
знаешь..есть там регулярки или нет не знает даже сам автор языка. так что будем считать что есть.

Цитата:

во вторых вот тебе реги в js
вы только что накатали эту статью и парите ссылку на нее,не обращайтесь со мной как с наивным 4летним ребенком

Цитата:

это код недо PHP какого-то...
это perl. если бы в js были реги то он бы работал

Gvozd 07.01.2011 20:55

Matre,
слишком толсто.
в JS есть регулярные выражения.

Matre 07.01.2011 21:00

Цитата:

в JS есть регулярные выражения.
докажите!
вы весь вечер несете откровенную ахинею и ничего еще не аргументировали!
пркажите мне реги в js и я замолчу

Roman-NN 07.01.2011 21:00

Против троллей эффективнее бана только игнор. Не обращайте внимания, профессор)

Вчера появился некоторый прогресс в моей проблеме: я начал удалять куку перед записью, т.е. вызывать deleteCookie(name) в начале функции setCookie. Полный бред, конечно, и танцы с бубном, но и сама проблема мистична, да и результат есть - в некоторых билдах ослика все стало работать как надо. Но в восьмом ie все же иногда проскальзывает эта трабла, а у заказчика как на зло именно этот браузер. Быть может есть мысли, из-за чего это может быть хотя бы теоретически?

Ума не приложу что происходит, я уже всеми известными проклятиями обругал мелкософт, скоро свои придумывать начну...

Gvozd 07.01.2011 21:02

Цитата:

Сообщение от Matre
пркажите мне реги в js и я замолчу

вот в этом сообщении некий пользователь форума как раз использовал регулярные выражения
http://javascript.ru/forum/css-html-...html#post86691

Gvozd 07.01.2011 21:02

Roman-NN,
я к троллям привычный.
меня они только забавят.
чай это не первый тролль на форуме)

Kolyaj 07.01.2011 21:08

Matre,
в этой теме вы гораздо лучше жжоте, нежели в http://javascript.ru/forum/project/1...elektorov.html , продолжайте :)

Кстати, а почему вы хотите именно, чтобы вам доказали существование регулярных выражений в JS, почему самому в тот же Яндекс не сходить?

Matre 07.01.2011 21:08

Цитата:

вот в этом сообщении некий пользователь форума как раз использовал регулярные выражения
/13/ это не регулярка
это просто поиск по подстроке

Цитата:

Кстати, а почему вы хотите именно, чтобы вам доказали существование регулярных выражений в JS, почему самому в тот же Яндекс не сходить?
мало ли что в этом яндексе написать могут.

кстати, мысли о том что в js есть регулярки-симптом шизофрении.задумайтесь

Kolyaj 07.01.2011 21:13

Как же вы хотите, чтобы мы вам доказали существование регекспов в JS, если вы никому не верите? :)

Matre 07.01.2011 21:16

если я все еще разговариваю с вами
то это значит что я еще верю в то что вы мне можете доказать
просто нужны нормальные аргументы

Kolyaj 07.01.2011 21:21

alert('abcda234bcd23423abcd'.replace(/\d+/g, ''));

Это аргумент?

Matre 07.01.2011 21:25

нет
тут просто замена по шаблону
регулярки это другое

Kolyaj 07.01.2011 21:26

Цитата:

Сообщение от Matre
регулярки это другое

Расскажите, пожалуйста.

Matre 07.01.2011 21:30

ну например
надо из строки x123 зделать x456
пишем

$primer = s/x123/x456/g;

вот это регулярки

Kolyaj 07.01.2011 21:32

Это регулярки в синтаксисе Perl. Хотя в вашем случае нет регулярки.

Цитата:

Сообщение от Matre
реги я видел в perl, в malbolge и в php но в java script их нет!

Почему вы говорите, что в PHP есть регулярки, а в JS нет? По вашей логике в PHP их тоже нет.

Gvozd 07.01.2011 21:33

alert('x123'.replace(/x123/, 'x456'))

так что ли?)

Matre 07.01.2011 21:36

Цитата:

Почему вы говорите, что в PHP есть регулярки, а в JS нет? По вашей логике в PHP их тоже нет.
это не логика это здравый смысл
замена по подстроке и регулярки это не одно и тоже

Kolyaj 07.01.2011 21:37

Цитата:

Сообщение от Matre
замена по подстроке и регулярки это не одно и тоже

Ну ладно, убедили. В JS нет регулярных выражений.

Gvozd 07.01.2011 21:44

<script type="text/javascript">
document.write('as123sza1233d'.replace(/(\d)(\d*)/g,'<u><b>$1</b>$2</u>'));
</script>

Matre 07.01.2011 21:46

Gvozd, да как вы не поймете
в js есть поиск по подстроке
есть замена по подстроке
но регулярок нету! пример регулярки я привел выше

учите java script

Kolyaj 07.01.2011 21:49

Gvozd,
расслабься, такое лечится только временем. У Matre, конечно, особо запущенный случай, но должно пройти.

Мне когда-то Zeroglif на одном, ныне не существующем, сайте долго и упорно пытался доказать, что не всё в JS объекты, никакие доводы не помогали. Так и не смог доказать. Только со временем всё встало на свои места :)

Matre 07.01.2011 21:54

Цитата:

что не всё в JS объекты
undefined и null не объекты

учите java script

и не спирайте свою неосведомленность на наличие у меня психических/умственных заболеваний

Kolyaj 07.01.2011 21:56

Цитата:

Сообщение от Matre
undefined и null не объекты

alert(typeof null);


Цитата:

Сообщение от Matre
учите java script

Перестаньте развивать во мне комплекс, мне и так стыдно, что я никак не могу взяться за изучение JavaScript (извините, неправильно писать название языка, который меня кормит, не могу)

Matre 07.01.2011 22:00

Цитата:

alert(typeof null);
не аргумент
объект должен мочь иметь свойства
null.primer=0;
не работает

учите java script

Kolyaj 07.01.2011 22:03

А строки в JavaScript объекты?

Matre 07.01.2011 22:06

смотря что понимать под объектом
свойств она иметь неможет,если только не создана через new String

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

Kolyaj 07.01.2011 22:07

У кого же мне спрашивать? В книге мало ли чего написать могут.

Цитата:

Сообщение от Matre
свойств она иметь неможет

А как же length?

Matre 07.01.2011 22:11

Цитата:

А как же length?
я имел в виду
x='primer';
x.my=0;
alert(x.my);

Цитата:

В книге мало ли чего написать могут.
не повторяйте за мной слова
то было реги в js, а тут всеголишь строки

Kolyaj 07.01.2011 22:17

Цитата:

Сообщение от Matre
все это можно узнать в любой книге

Неужели в любой книге не написано про регулярные выражения? Вы же читали Флэнагана, вот же там http://javascript.ru/book/definitiveguide#head-toc-full
Цитата:

# Регулярные выражения

...

Шаблоны и регулярные выражения

* Определение регулярных выражений
* Методы класса String для поиска по шаблону
* Объект RegExp

Matre 07.01.2011 22:19

флэнаган конечно нормально шарит
но здесь его кудато не туда занесло
видимо,он имел в виду замену и поиск по шаблонам

Kolyaj 07.01.2011 22:21

Ну я и говорю, мало ли что напишут в этих книгах.

Matre 07.01.2011 22:32

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

Kolyaj 07.01.2011 22:34

Для полугода работы фрилансером вы как-то слишком по отечески со мной разговаривате :)

Matre 07.01.2011 22:36

опыт дело наживное
главное это умение

Logo 09.01.2011 19:17

Цитата:

Сообщение от Vulkan
потому что это код недо PHP какого-то...

Это PHP недо Perl, и изначально задумывался как недо Perl.


Часовой пояс GMT +3, время: 07:27.