Всем привет, заранее буду признателен за помошь. Вобщем мне нужно было задать временные куксы, для теста время жизни взял 10 секунд. На php реализовал это следующим образом: PHP: setcookie("temporary","blablalbla",time()+10); Все хорошо, все работает. Но только в том случае!, КОгда Время на сервере такое е же как и у пользователя на компе. В противном случае будет задан пирожок с неправильным временем жизни. Чтобы узнать время пользователя пришлось воспользовался javascript. В яваскрипте есть функция gettime - аналог time на php. Передать переменную из явы в пхп можно (на сколько мне известно) 3 способами: 1. гет запрос 2 пост запрос 3 установить куки Первые два варианта сразу отбрасываю, т к они требуют обновления страница, остается 3. Гораздо легче задать куки через яву. Собственно тут я и столкнулся спроблемой. Ниже приведу код: PHP: <SCRIPT LANGUAGE="JavaScript"> function setCookie (name, value, expires, path, domain, secure) { document.cookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); } </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> setCookie("foo", "bar", "Mon, 01-Jan-2010 00:00:00 GMT", "/"); </SCRIPT> В данном примере в переменной время (expires) нужно указать точное число, а мне же нужно чтобы куки устанавливалось на определенное колиичетсво секунд. Как это сделано в php time()+ секунды. В этом вся и загвостка. Моих знаний не хватает. Буду признателен за помош
PHP: <html> <head></head> <body> <SCRIPT LANGUAGE="JavaScript"> var d = new Date( (new Date()).getTime() + 10000 ); document.write(d.toString()); </SCRIPT> </body> </html> в d будет хранитсья текущая дата клиента + 10 секунд. (getTime() в милисекундах).
чувствуя себя нубом, не могу все совсместить воедино... Нелюблю я яву...может кто поможет? я делаю так: PHP: <SCRIPT LANGUAGE="JavaScript"> function setCookie (name, value, expires, path, domain, secure) { document.cookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); } </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> var d = new Date( (new Date()).getTime() + 10000 ); setCookie("test111", "bar", "d.toString()", "/"); </SCRIPT> кукис задается но без времени
а так: PHP: <SCRIPT LANGUAGE="JavaScript"> function setCookie (name, value, expires, path, domain, secure) { document.cookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); } </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> var d = new Date( (new Date()).getTime() + 10000 ); setCookie("test111", "bar", d.toString(), "/"); </SCRIPT>
рулед все.... покажите мне готовое решение... Я сам знаю много способов но силен только в php.... Так что обращаюсь за помощью к вам
d.toString() я тебе для примера сверху написал, чтобы просто на экран дату вывести, плюс ты ее в кавычки зачем-то заслал. Видимо проблема с форматом даты в котором выводит ее toString(), возможно этот момент броузро-зависим, проверил щас твой код на FireFox'e, в линуксе, все работает и дата задается. Попробуй поэксперементируй, вместо toString(): toGMTString(), toLocaleString(), toUTCString(). Вообще посравнивай как твоя опера дату распечатывает. Я так понял "Mon, 01-Jan-2010 00:00:00 GMT" с таким вариантом все работает, посмотри насколько toString() от него отличается? Возможно в разных броузерах и вывод будет разный (или даже в разны ОС), и возможно прибется форматировать эту строку вручную строковыми функциями.
К примеру так Вызов на странице функции test Code: function Inint_AJAX() { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} //IE try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} //IE try { return new XMLHttpRequest(); } catch(e) {} //Native Javascript alert("XMLHttpRequest not supported"); return null; } function test(параметры) { var type = document.getElementById("type"); var url = 'modules/test.php?what=' + type.value; var req = Inint_AJAX(); req.onreadystatechange = function () { if (req.readyState == 4) { if (req.status == 200) { var text = req.responseText.toString(); //return value //Выполнение действия с результатом php ответа text } } }; req.open('GET', url, true); //make connection req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=cp1251'); // set Header req.send(null); //send value } test.php Code: <?php If ($_GET['type']) } echo($_GET['type']); //Отправка AJAX'у ответ } ?>
n0reply - спасибо что не поленился все рассказать буду эксперементировать. Хотя уже понимаю из вышесказанного что этот способ будет не оптимальным, а мне нужна хотябы 99% работоспособность. PS Если ктонибудь знает еще способы по заданию кукисов с использованием реального форматама времени пользователя + добавление секунд жизни, пожалуйста отписывайтесь здесь.
Спасибо за помошь. Всем по Плюсику. n0reply в опере заработала используя toGMTString() , щас попробую метод Феникса. Думаю пост можно закрывать.
Я думаю догодаешься адаптировать Code: var type = document.getElementById("type"); var url = 'modules/test.php?what=' + type.value; под свои нужды =) P.S. Если нужно, вот нарыл у себя готовый пример - http://rapidshare.com/files/256201845/user-proofing-ajax.zip.html
Проверил твой JS вариант (с toGMTString() ) на FireFox'e (в линухе), тоже все работает, скорее всего просто FF по умолчанию время выводит в GMT формате, наверное и в других броузерах будет работать, если ты в винде, то на IE проверить не долго.
Как еще один вариант, попробуй обойтись вообще без JS, чистым пхп, примерно так: PHP: <?php function set_cookie($Name, $Value = '', $MaxAge = 0, $Path = '', $Domain = '', $Secure = false, $HTTPOnly = false) { header('Set-Cookie: ' . rawurlencode($Name) . '=' . rawurlencode($Value) . (empty($MaxAge) ? '' : '; Max-Age=' . $MaxAge) . (empty($Path) ? '' : '; path=' . $Path) . (empty($Domain) ? '' : '; domain=' . $Domain) . (!$Secure ? '' : '; secure') . (!$HTTPOnly ? '' : '; HttpOnly'), false); } # examples: set_cookie("test111", "bar", 10); /* через 10 секунд кончитсья */ set_cookie("TestCookie", "value", 3600, "/~rasmus/", ".example.com", 1); ?> по http://www.faqs.org/rfcs/rfc2109.html у Set-Cookie (заголовка) есть параметр Max-Age=delta-seconds. Который задает интервал жизни куки в секундах.
Отлично =) Думаю самый лучший вариант, $MaxAge - решение всех проблем, никогда не слышал о нем раньше