Просмотр полной версии : Setcokie в Javascript Нужна помошь Срочно =)
Всем привет, заранее буду признателен за помошь.
Вобщем мне нужно было задать временные куксы, для теста время жизни взял 10 секунд.
На php реализовал это следующим образом:
setcookie("temporary","blablalbla",time()+10);
Все хорошо, все работает. Но только в том случае!, КОгда Время на сервере такое е же как и у пользователя на компе. В противном случае будет задан пирожок с неправильным временем жизни.
Чтобы узнать время пользователя пришлось воспользовался javascript. В яваскрипте есть функция gettime - аналог time на php.
Передать переменную из явы в пхп можно (на сколько мне известно) 3 способами:
1. гет запрос
2 пост запрос
3 установить куки
Первые два варианта сразу отбрасываю, т к они требуют обновления страница, остается 3. Гораздо легче задать куки через яву. Собственно тут я и столкнулся спроблемой.
Ниже приведу код:
<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()+ секунды. В этом вся и загвостка. Моих знаний не хватает. Буду признателен за помош
<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() в милисекундах).
А СПАСИБО ВЕРИ МАЧ =) ЩАС БУДУ ПРОБОВАТЬ
чувствуя себя нубом, не могу все совсместить воедино... Нелюблю я яву...может кто поможет?
я делаю так:
<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>
кукис задается но без времени
а так:
<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>
http://i043.radikal.ru/0907/1c/3bb54faaf3f0.jpg Аналагично, время не задается пачемуТО
FireFenix
15.07.2009, 22:56
Чтобы узнать время пользователя пришлось воспользовался javascript. В яваскрипте есть функция gettime - аналог time на php.
Передать переменную из явы в пхп можно (на сколько мне известно) 3 способами:
1. гет запрос
2 пост запрос
3 установить куки
Первые два варианта сразу отбрасываю, т к они требуют обновления страница
AJAX не рулед?
JS выставлять куки - извращение
рулед все.... покажите мне готовое решение... Я сам знаю много способов но силен только в php.... Так что обращаюсь за помощью к вам
d.toString() я тебе для примера сверху написал, чтобы просто на экран дату вывести, плюс ты ее в кавычки зачем-то заслал.
Видимо проблема с форматом даты в котором выводит ее toString(), возможно этот момент броузро-зависим, проверил щас твой код на FireFox'e, в линуксе, все работает и дата задается.
Попробуй поэксперементируй, вместо toString(): toGMTString(), toLocaleString(), toUTCString(). Вообще посравнивай как твоя опера дату распечатывает. Я так понял
"Mon, 01-Jan-2010 00:00:00 GMT"
с таким вариантом все работает, посмотри насколько toString() от него отличается? Возможно в разных броузерах и вывод будет разный (или даже в разны ОС), и возможно прибется форматировать эту строку вручную строковыми функциями.
FireFenix
15.07.2009, 23:04
К примеру так
Вызов на странице функции test
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
<?php
If ($_GET['type'])
}
echo($_GET['type']); //Отправка AJAX'у ответ
}
?>
n0reply - спасибо что не поленился все рассказать буду эксперементировать. Хотя уже понимаю из вышесказанного что этот способ будет не оптимальным, а мне нужна хотябы 99% работоспособность.
PS Если ктонибудь знает еще способы по заданию кукисов с использованием реального форматама времени пользователя + добавление секунд жизни, пожалуйста отписывайтесь здесь.
Спасибо за помошь. Всем по Плюсику.
n0reply в опере заработала используя toGMTString() , щас попробую метод Феникса. Думаю пост можно закрывать.
FireFenix
15.07.2009, 23:15
Я думаю догодаешься адаптировать
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
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. Который задает интервал жизни куки в секундах.
Как еще один вариант, попробуй обойтись вообще без JS, чистым пхп, примерно так:
<?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 - решение всех проблем, никогда не слышал о нем раньше
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot