Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Есть вопрос по JavaScript+cookie! |

11.05.2007, 19:55
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
Есть вопрос по JavaScript+cookie!
Вот мой скрипт:
PHP код:
function getCookieVal (offset)
{
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name)
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen)
{
var j = i + alen;
if (document.cookie.substring(i, j) == arg) return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
var currentQuest = GetCookie('currentQuest');
if (currentQuest == "1")
{counter();}
function counter()
{
var currentQuest1 = '1';
pathname = location.pathname;
myDomain = pathname.substring(0,pathname.lastIndexOf('/')) +'/';
var largeExpDate = new Date ();
largeExpDate.setTime(largeExpDate.getTime() + (7 * 24 * 45 * 45));
SetCookie('currentQuest1',currentQuest1,largeExpDate,myDomain);
function SetCookie (name, value){ var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); }
}
var currentQuest1 = GetCookie('currentQuest1');
if (currentQuest1 == "1")
{counter();}
function counter()
{
var test1 = '1';
pathname = location.pathname;
myDomain = pathname.substring(0,pathname.lastIndexOf('/')) +'/';
var largeExpDate = new Date ();
largeExpDate.setTime(largeExpDate.getTime() + (7 * 24 * 45 * 45));
SetCookie('test1',test1,largeExpDate,myDomain);
function SetCookie (name, value){ var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); }
}
var test1 = GetCookie('test1');
if (test1 == "1")
document.location.href="www.antichat.ru";
Поясню что оне должен делать: Во первых должен проверить наличие кука currentQuest , если он есть и равен '1' то создать кук currentQuest1 равный '1' , затем проверяем наличие кука currentQuest1 равного '1' и при этом условии создаём кук test1 и задаём ему значение '1' , и наконец проверяем наличие кука test1 равного '1', если он есть то редиректим юзера на нуюную нам страницу.
Всё бы хорошо, но в скрипте какая-то ошибка и он не работает, я просто не особо смыслю в JavaScript и поэтому когда я собирал его по кусочкам наверняка запорол какой-нить из них. Кто может ПОМОГИТЕ!
|
|
|

12.05.2007, 03:40
|
|
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме: 1543521
Репутация:
272
|
|
с функциями у тебя все нормально, только там напутано того рот. Сначала ты вызываешь функцию, а потом объвляешь... так нельзя. сначала объвить потом вызывать. Так еще со скобками косяки и в логике тоже. Короче много где накосячил. Вот работающий код:
PHP код:
<script language="JavaScript">
function getCookieVal (offset)
{
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name)
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen)
{
var j = i + alen;
if (document.cookie.substring(i, j) == arg) return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie (name, value)
{
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : "");
}
function counter()
{
var currentQuest1 = '1';
var largeExpDate = new Date ();
largeExpDate.setTime(largeExpDate.getTime() + (7 * 24 * 45 * 45));
SetCookie('currentQuest1',currentQuest1);
}
var currentQuest=GetCookie('currentQuest');
if(currentQuest=="1")SetCookie('currentQuest1',"1");
var test1 = GetCookie('test1');
if (test1 == "1") document.location="http://antichat.ru";
</script>
|
|
|

12.05.2007, 13:13
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
Спасибо je0n!
Но возник ещё один вопросик: Есть кука answers , значения в которой записаны так: "значение"|"значение"... Я хотел бы знать как проверить наличие любого значения (оно меняеться всё время).
Например есть три значения 3|-10|9 , а мне нужно знать не то какое значение там записано, но то что их три. Можно ли это как-то осуществить?
|
|
|

12.05.2007, 19:29
|
|
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме: 1543521
Репутация:
272
|
|
Вот, держи функцию в две строчки  . Возвращает количество значений
PHP код:
<script language="JavaScript">
function antichat(str)
{
s=str.split("|"); //Тут вместо | можешь поставить любой разделитель
return s.length;
}
x=antichat('3|-10|9');
document.write(x);
</script>
|
|
|

13.05.2007, 15:17
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
PHP код:
function getCookieVal (offset)
{
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name)
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen)
{
var j = i + alen;
if (document.cookie.substring(i, j) == arg) return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie (name, value)
{
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : "");
}
function counter()
{
var currentQuest1 = '1';
var largeExpDate = new Date ();
largeExpDate.setTime(largeExpDate.getTime() + (7 * 24 * 45 * 45));
SetCookie('currentQuest1',currentQuest1);
}
var currentQuest=GetCookie('currentQuest');
if(currentQuest=="1")SetCookie('currentQuest1',"1");
function Testum(str)
{
s=str.split("|");
return s.length;
}
var a=GetCookie('answers');
var c=GetCookie('currentQuest1');
if(a=="1",c=="1")SetCookie('test1',"a");
var test1 = GetCookie('test1');
if (test1 == "1") document.location="../../../../../testum/content/chapter1/section/paragraph1/test2.html?access=true";
В итоге получился вот такой код. Но в кук test1 записываеться почему-то не цифра а сама переменная "a", а почему не знаю. И ещё вопрос можно-ли делать две проверки разом:
"var a=GetCookie('answers');
var c=GetCookie('currentQuest1');
if(a=="1",c=="1")SetCookie('test1',"a");" или ошибка заключаеться именно в этом?
|
|
|

13.05.2007, 16:38
|
|
Новичок
Регистрация: 11.05.2007
Сообщений: 6
Провел на форуме: 621970
Репутация:
61
|
|
записывается а потому что а закавычена. SetCookie('test1',"a");
а проверять мона хоть десять куков
|
|
|

13.05.2007, 16:59
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
Кавычки я снял, но теперь в test1 записываеться null... Не пойму, вроде ведь всё правильно!?
|
|
|

13.05.2007, 17:27
|
|
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме: 1543521
Репутация:
272
|
|
Короче по порядку:
1) проверок можно делать сколько хошь, но не через запятую, а логическими "и" и "или" (еще есть "не"). В твоем случае будет выглядеть вот так:
PHP код:
if(a=="1" && c=="1")SetCookie('test1',a);
2) null у тебя в переменно a, потому что наверное не установлен кук answers
Вот, что в итоге:
PHP код:
var a=GetCookie('answers');
var c=GetCookie('currentQuest1');
if(a!="1" && c!="1")SetCookie('test1',a);
var test1 = GetCookie('test1');
if (test1 == "1") document.location="../../../../../testum/content/chapter1/section/paragraph1/test2.html?access=true";
P.S. А вообще чем в слепую тупо пытаться собрать код, прочел страниц 50 любой книжки по JavaScript'у, и я больше чем уверен, такие бы элементарные вещи в легкую сам бы делал.
|
|
|

13.05.2007, 18:03
|
|
Новичок
Регистрация: 11.05.2007
Сообщений: 6
Провел на форуме: 621970
Репутация:
61
|
|
не знаю зачем такая невпупенная функция и зачем проверять по очерди и устанавливать кукисы вообще, но все решается намного проще
Код:
<script type="text/javascript">
function chCookie(name)
{var nC=name+"=1"
var clen=name.length+2
if ((document.cookie.indexOf(nC+";")!=-1)||(document.cookie.indexOf(nC+" ")!=-1)||((document.cookie.indexOf(nC)+clen)==document.cookie.length))
{return "exist"}}
function sCookie(name, value)
{document.cookie=name+"="+value+";expires="+сюды срок}
if (chCookie("currentQuest")=="exist")
{sCookie("currentQuest1", "1")}
if (chCookie("currentQuest1")=="exist")
{sCookie("test1", "1")}
if (chCookie("test1")=="exist")
{document.location="..."}
</script>
|
|
|

14.05.2007, 12:28
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
Спасибо всем! Всё работает +). Берусь за мануалы по JavaScript'у!!!
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|