Проблема с cookie

12
MB
На сайте с 24.02.2009
Offline
162
1527

Всем привет.

вобщем проблемка такая, скрипт по обмену трафиком устанавливает куку и в неё пишет все сайты с трейда которые открыл посетитель, проблема в том, что когда размер куки достигает 4кб, кука не перезаписывается и сайты с трейда перестают открываться, как сделать автоудаление этой куки по достижении размера 4кб, может на javascript'e что нибудь можно придумать?

fedimen
На сайте с 16.05.2012
Offline
3
#1

Размер куки ограничивается 4 Кб.

Как работать с куки через JS: http://izhurnal.blogspot.com/2010/10/cookie-javascript.html

Занимаюсь написанием программ и скриптов на заказ (/ru/forum/717537):
ICQ: 600382789, Skype: fedimen, Е-Маil: fedimen (пудель) gmail (точка) com
MB
На сайте с 24.02.2009
Offline
162
#2

задам вопрос по другому, как организовать код JS чтоб он обнулял куку при достижении 4кб

нужно что то типа

GetCookie, проверяет длину (.length)

если длина больше, то кука обнуляется (SetCookie)

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

DP
На сайте с 24.04.2012
Offline
16
#3

Для начала качаем плагин для работы с кукис, разумеется для него нужен jquery. Далее вставляем что-то типа такого


var sites = $.cookie("sites");
if(sites.length >= 2048)
{
$.cookie("sites", null);
}

Это если я в подсчетах не ошибся. 4КБ это 32768 бит. Каждый символ в стринге согласно стандарту 16 бит, значит есть место для 2048 символов.

fedimen
На сайте с 16.05.2012
Offline
3
#4

Проблема в том, что более 4Кб размер куки не будет, браузер его сам обрежет. Для надежности сравнивать надо с 1024.

DP
На сайте с 24.04.2012
Offline
16
#5

Это слишком мало. Если записывается только адрес сайта, то тут 50 символов хватит с головой.

MB
На сайте с 24.02.2009
Offline
162
#6
fedimen:
Проблема в том, что более 4Кб размер куки не будет, браузер его сам обрежет. Для надежности сравнивать надо с 1024.

в том то и проблема что браузер её не обрезает, пробовал во всех браузерах, получается что инфа записаться не может и всё стопорится.

вот нашёл тут какое то решение http://www.cms4site.ru/ru-joke-13-cookies.html но оно не срабатывает почему то, пробовал оба варианта на php и на js

MB
На сайте с 24.02.2009
Offline
162
#7
developer_php:
Для начала качаем плагин для работы с кукис, разумеется для него нужен jquery. Далее вставляем что-то типа такого

var sites = $.cookie("sites");
if(sites.length >= 2048)
{
$.cookie("sites", null);
}

Это если я в подсчетах не ошибся. 4КБ это 32768 бит. Каждый символ в стринге согласно стандарту 16 бит, значит есть место для 2048 символов.

Сделал по этому методу, вроде сработало, только ошибки стали лезть в фаерфоксе $.cookie is not a function может что в коде поправить надо?

fedimen
На сайте с 16.05.2012
Offline
3
#8

Да зачем тут эти jQuery и доллары?

Если есть возможность использовать PHP, то JS не нужен, берите пример по вашей ссылки для PHP:

$length = strlen($_SERVER['HTTP_COOKIE']);
$quantity = sizeof($_COOKIE);
if (isset($_COOKIE[$name])) $length = $length - strlen($name.'='.rawurlencode($_COOKIE[$name]));
else {
if ($length>0) $length = $length + 2;
$quantity++;
}
$length = $length + strlen($name.'='.rawurlencode($value));
if ($length>=4000 || $quantity>=20) удаляем;
setcookie($name,$value);

Вместо "удаляем" сделать удаление ненужных куки.

MB
На сайте с 24.02.2009
Offline
162
#9
fedimen:

Если есть возможность использовать PHP, то JS не нужен, берите пример по вашей ссылки для PHP:
$length = strlen($_SERVER['HTTP_COOKIE']);

$quantity = sizeof($_COOKIE);
if (isset($_COOKIE[$name])) $length = $length - strlen($name.'='.rawurlencode($_COOKIE[$name]));
else {
if ($length>0) $length = $length + 2;
$quantity++;
}
$length = $length + strlen($name.'='.rawurlencode($value));
if ($length>=4000 || $quantity>=20) удаляем;
setcookie($name,$value);

Вместо "удаляем" сделать удаление ненужных куки.

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

MB
На сайте с 24.02.2009
Offline
162
#10

Проблема решена, вот решение на php, вдруг кто то столкнётся с такой же проблемой, вставляем этот код в index.php:

$length = strlen($_SERVER['HTTP_COOKIE']);

$quantity = sizeof($_COOKIE);

if ($length<3500 && $quantity<=20) {

include "in.php";

}

else {

setcookie('sloth_nosend', "", time() - 86400);

}

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий