Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Запись в куку, чтение с куки (https://javascript.ru/forum/misc/44559-zapis-v-kuku-chtenie-s-kuki.html)

den777 24.01.2014 13:36

Запись в куку, чтение с куки
 
Здравствуйте, несколько дней бьюсь над такой траблой.
Есть ссылка вида site.net.com/?ref=R111


1. Как переменную R111 записать в куку?
,если: name=trud value=R111
Всё, что получилось
<script language="JavaScript" type="text/javascript">
<!--
var ws=new Date();
ws.setDate(100+ws.getDate());
document.cookie="trud=R111; path=/; expires="+ ws.toGMTString();
//-->
</script>
но нужно, что бы R111 менялось на своё. Понимаю, что нужно задать условие, но не знаю как это реализовать.

2. Как потом значение с куки присвоить на странице конкретному полю?

tsigel 24.01.2014 13:45

Прекрасная статья о том как пользоваться куками. А ещё лучше пользоваться локалсторджем

den777 24.01.2014 14:01

Цитата:

Сообщение от tsigel (Сообщение 293797)

Открыта эта страница :)
Пробовал вот это
<script>
function setCookie("trud", "R111", options) {
options = options || {};

var expires = options.expires;

if (typeof expires == "number" && expires) {
var d = new Date();
d.setTime(d.getTime() + expires*1000);
expires = options.expires = d;
}
if (expires && expires.toUTCString) {
options.expires = expires.toUTCString();
}

value = encodeURIComponent(value);

var updatedCookie = name + "=" + value;

for(var propName in options) {
updatedCookie += "; " + propName;
var propValue = options[propName];
if (propValue !== true) {
updatedCookie += "=" + propValue;
}
}

document.cookie = updatedCookie;
}
</script>

Так писал - не работает. Или все поля name value нужно переименовывать на свои?
И ещё вопрос, вот эта связка
"name + "=" + value" , что в ней значит "=", это значение нужно менять?

tsigel 24.01.2014 14:23

function setCookie(name, value, options) {
  options = options || {};

  var expires = options.expires;

  if (typeof expires == "number" && expires) {
    var d = new Date();
    d.setTime(d.getTime() + expires*1000);
    expires = options.expires = d;
  }
  if (expires && expires.toUTCString) { 
  	options.expires = expires.toUTCString();
  }

  value = encodeURIComponent(value);

  var updatedCookie = name + "=" + value;

  for(var propName in options) {
    updatedCookie += "; " + propName;
    var propValue = options[propName];    
    if (propValue !== true) { 
      updatedCookie += "=" + propValue;
     }
  }

  document.cookie = updatedCookie;
}

// возвращает cookie с именем name, если есть, если нет, то undefined
function getCookie(name) {
  var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}

setCookie("111", "222");
alert(getCookie("111"));

den777 25.01.2014 04:38

tsigel, спасибо за скрипт, но нужно немного другое
Цитата:

Сообщение от den777 (Сообщение 293796)
Здравствуйте, несколько дней бьюсь над такой траблой.
Есть ссылка вида site.net.com/?ref=R111


1. Как переменную R111 записать в куку?

Мне нужно, что бы записывалось в куки значение после /?ref= В примере это R111, но оно изменяется, в следующий раз это может быть R261 или R857 и т.д. Как именно сформировать условие, что бы любое значение после /?ref= записывалось в куку? :write:
Пробовал как R***, но не проходит в куке также отображается R***.

tsigel 27.01.2014 19:21

den777,
Берём ссылку, копируем в текстовую переменную. С помощью магических операций с текстовыми переменными (их множество разных вариантов и реализаций (split, replace, indexOf и комбинции их применения)), убираем всё лишнее, оставив только значение. Придумываем имя и пишем в куку.

Пример магической опирации:

alert("site.net.com/?ref=R111".split("ref=")[1]);

Deff 27.01.2014 23:52

Чтение/Запись кукисов


<script type="text/javascript">
function setcOOkie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+ encodeURIComponent(b) +(c ? '; expires='+d.toUTCString() : '');else return false;}
function getcOOkie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? decodeURIComponent(c[1]) : false;}

var str =  'Привет Мир!'
setcOOkie('hello_World',str,24*60*60*1000) //Параметры: Имя кука, данные, длительность хранения в ms
//Проверка наличия кука:
var a = getcOOkie('hello_World'); //Параметры: Имя кука, возвращает данные(если кука нет => false
if(a) alert(a);
</script>


Если записываем в кук цифровые данные, то необходимо преобразовать в строчный формат

var num = 0;
setcOOkie('number','' + num,1000);
//При чтении преобразуем назад в цифру:
var a = getcOOkie('number');
if(a)a = parseFloat(a);

Стирание Кука: - Записываем true в данные и отрицательное число в пункт время

setcOOkie('foo',true,-1000);

==============
К сожалению обрезан патч, посколь у меня на сервисе не актуально

Deff 27.01.2014 23:59

function guteLink(a) {
  return a.replace(/.*?\/\?ref=([^\/]+).*$/g,'$1').split(/\/|#/)[0];
}
var lnk = "site.net.com/?ref=R111";
alert(guteLink(lnk) )
var lnk = "site.net.com/?ref=R111#post11";
alert(guteLink(lnk) )
var lnk = "site.net.com/?ref=R111/file/#post11";
alert(guteLink(lnk) )


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