Сохранение в куках переменной
Доброго времени суток всем!
Я использую скрипт который генерирует рандомный набор из 6 печатных символов (например - 86yz4b): function str_rand() { var result = ''; var words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; var max_position = words.length - 1; for( i = 0; i < 6; ++i ) { position = Math.floor ( Math.random() * max_position ); result = result + words.substring(position, position + 1); } return result; } В дальнейшем мне необходимо использовать этот набор символов (все те же - 86yz4b) в качестве переменной для некоторых функций, даже после обновления страницы пользователем. Для этого, мне необходимо записать в куки эту переменную (всё ту же - 86yz4b). Я некогда раньше не работал с куками, сегодня весь день провел в активном гуглеже по данной теме, нашел массу информации по работе с куками, но нечего даже издали приближенного к своей потребности не нашел. Пожалуйста поделитесь своим опытом и знаниями в данной сфере!) |
откройте для себя мир localStorage
|
Большое спасибо за совет. Но я очень прошу помочь мне именно с моим вопросом, на счет записи в куки. Почему? Потому что мне необходимо использовать именно куки + способ записи информации что в куки что в локальные хранилища очень похож, а я как раз с ним не могу разобраться. Заранее спасибо
|
Смотрите учебник по cookie
Что непонятно спрашивайте |
вариант "Непонятно все", подойдет?)
Я шучу конечно же. Дело в том что я вчера весь день ковырял различное множество статей и ту что вы мне скинули в том числе. В результате я пришел к выводу что работа с куками на чистом js очень усложнена, что неоправданно в моем случае по скольку мне не нужно то многообразие параметров которое прилагает чистый js. По этому я решил пойти по упрощенному пути и воспользоваться библиотекой jquery.cookie.js. В результате у меня получилась конструкция: $(function() { <!-- Скрипт который создает имя переменной (например - 86yz4b) --> function str_rand() { var result = ''; var words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; var max_position = words.length - 1; for( i = 0; i < 6; ++i ) { position = Math.floor ( Math.random() * max_position ); result = result + words.substring(position, position + 1); } return result; } <!-- EXIT Скрипт который создает имя переменной (например - 86yz4b) --> <!-- Создание куки --> $.cookie('name', value, { expires: 2, path: '/' }); if (!$.cookie('namel')) { // если куки не было, то объявить "var" и задать ему значение которое с генерировал выше переведенный скрипт (например - 86yz4b) } esle { // если кука есть, то записать в её "value" все тоже значение которое с генерировал выше переведенный скрипт (например - 86yz4b), что бы при повторных сессиях (пока существует кука) можно было использовать именно его (86yz4b), то есть то значение которое было получено при первом заходе человека на страницу } <!-- EXIT Создание куки --> }); Проверки и дальнейший алгоритм я понимаю как осуществить, а вот что касается того как мне записать значение (например - 86yz4b) в "value" самой куки, я разобраться не могу. |
smart-create,
весь код ... function str_rand() {}; var result = localStorage.getItem('result') || str_rand(); localStorage.setItem('result', result ); |
А значение в localStorage не будет перезаписываться с каждым выполнением функции str_rand() ?
Я имею в виду что мне нужно что бы function str_rand() {} один раз с генерировала рандом, он записался в localStorage и в течении некоторого времени брался от туда, в независимости от того что function str_rand() {} и дальше будет продолжать генерировать эти рандомы |
smart-create,
а проверить самому? значение result в 4 строке, после перезагрузки |
рони,
Дело в том что я изначально пытался решить эту задачу самостоятельно, в итоге уже второй день мучаюсь и не могу разобраться. Я уже сталкивался, вчера с localStorage, но решил что этот вариант для меня не подходит, потому как я не нашел способ избежать перезаписи значения в нем при следующем выполнении function str_rand() {}. По этому и интересуюсь, у самого уже каша в голове. Могли бы вы еще уточнить что имеете в виду: "значение result в 4 строке, после перезагрузки", - я к сожалению не совсем понял |
smart-create,
function str_rand() {}; var result = localStorage.getItem('result') || str_rand(); localStorage.setItem('result', result ); alert(result ) |
function str_rand() { var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; for( var i = 0; i < 6; ++i ) { result += words.substr( Math.floor( Math.random() * words.length ), 1); } return result; } var value; if(value = document.cookie.match(/(?:^|; )str_rand=([^;]*)/)){ value = value[1]; }else{ value = str_rand(); document.cookie = 'str_rand=' + value + '; path=/; expires=Tue, 01 Feb 4000 11:11:11 GMT'; } if(confirm('Текущее значение: "' + value + '".\nОчистить?')){ document.cookie = 'str_rand=; path=/; expires=Thu, 01 Feb 0001 11:11:11 GMT'; } Заодно исправил вашу функцию str_rand: 1. Отнимать у words.length единицу не нужно, потому что Math.random() никогда не равен единице, и с округлением вниз (Math.floor) максимально возможное значение и так будет на единицу меньше. В изначальной версии в result никогда бы не попала "m". 2. Перед i в цикле обязательно следует ставить var(let), как и пред любыми иными переменными в функции, иначе это может сломать что-нибудь внешнее. 3. Косметическое сокращение кода. |
рони,
Я прошу прощения за свое глухое не понимание, помогите пожалуйста разобраться нубу) дописал я после своей функции ваш скрипт, что вышло и так понятно: function str_rand() { var result = ''; var words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; var max_position = words.length - 1; for( i = 0; i < 6; ++i ) { position = Math.floor ( Math.random() * max_position ); result = result + words.substring(position, position + 1); } return result; } var result = localStorage.getItem('result') || str_rand(); localStorage.setItem('result ', result ); alert(result); Но вопрос это не как не решает, да значение функции str_rand() записывается в localStorage, но только до обновления страницы, после обновления значение совершенно другое, потому что как только страница загрузилась функция str_rand() уже выполнила свое дело |
smart-create,
пробел уберите имени ключа в строке 14 localStorage.setItem('result', result ); |
smart-create,
с вариантом str_rand от Aetae, function str_rand() { var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; for( var i = 0; i < 6; ++i ) { result += words.substr( Math.floor( Math.random() * words.length ), 1); } return result; } var result = localStorage.getItem('result') || str_rand(); localStorage.setItem('result', result ); alert(result); |
Всем спасибо за участие, отдельное спасибо Aetae.
Вопрос снят |
P.S.
function str_rand() { var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; for( var i = 0; i < 6; ++i ) { result += words.charAt( Math.floor( Math.random() * words.length ) ); } return result; }Инерция мышления.) |
Aetae,
У меня вот тоже инерция мышления) Я задал сам себе вопрос на которой не смог ответить. Что же все таки лучше использовать? Куки или локальные хранилища, как советовал рони, дайте пожалуйста совет) |
smart-create, всё. Для надёжности. :)
|
Aetae,
Понял, спасибо большое! Еще позволю себе последнюю наглость и задам 2 вопроса связаных между собой вопроса) 1) Не подскажите как задать "время жизни" куки, на 2 дня с момента создания, вместо вот этого "expires=Thu, 01 Feb 0001 11:11:11 GMT"; 2) И как задать время хранения значения моей переменной в локальном хранилище? Я знаю что и сам могу найти ответы на эти вопросы, просто уверен что вы это и так уже знаете, а я сейчас потрачу кучу времени если начну гуглить)) Заранее спасибо |
smart-create,
var limit = 2 * 24 * 3600 * 1000; // 2 суток var localStorageInitTime = localStorage.getItem('localStorageInitTime'); if (localStorageInitTime === null) { localStorage.setItem('localStorageInitTime', +new Date()); } else if(+new Date() - localStorageInitTime > limit){ localStorage.clear();// localStorage.removeItem('result') localStorage.setItem('localStorageInitTime', +new Date()); }; function str_rand() { var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; for( var i = 0; i < 6; ++i ) { result += words.substr( Math.floor( Math.random() * words.length ), 1); } return result; } var result = localStorage.getItem('result') || str_rand(); localStorage.setItem('result', result ); alert(result); |
рони,
Спасибо большое! |
Цитата:
'expires=' + new Date(+new Date + 2 * 24 * 60 * 60 * 1000).toUTCString() Цитата:
|
Я не перестану сегодня благодарить))
Вы и рони правда мне очень помогли сегодня, без Вас копался бы еще неделю) На самом деле у меня возник еще один вопрос, последний. Если я использую localStorage, подскажите пожалуйста, как мне грамотно организовать проверку, по типу "Если в localStorage записано значение "result" то сделать... (что нибудь сделать)". Я вот сижу над этим сейчас, бьюсь как рыба об лед, а в итоге получаются одни только костыли( Опять же таки, заранее благодарен за любую помощь:) |
if( localStorage.getItem('result') ){ } |
Точно..., даже неудобно стало...
затупил одним словом( но все равно спасибо)) на этом вроде бы все) |
Друзья, добрый день! Сегодня новый день, а у меня новые вопросы)
Вчера как вы помните у меня была задача сохранить либо в куки, либо в локальные хранилища первое значение которое генерирует скрипт рандомного подбора символов. В итоге вышел вот такой скрипт: function str_rand() { var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; for( var i = 0; i < 6; ++i ) { result += words.charAt( Math.floor( Math.random() * words.length ) ); } return result; } var result = localStorage.getItem('result') || str_rand(); localStorage.setItem('result', result ); Сегодня у меня возникла новая задача, абсолютно такая же как и вчера, только теперь мне нужно сохранить не первое а последнее значение которое выдает скрипт) Если я вчера еще не слишком Вам надоел, прошу помочь разобраться с этим вопросом) |
Цитата:
|
рони, я пытаюсь, сижу читаю-изучаю, пока не получается, разумеется нужно время, но решил параллельно сюда написать. Вчера вы очень здорово помогли мне и разобраться, и очень много времени сберегли
|
smart-create,
не понимаю. |
рони,
Что именно?) |
smart-create,
Цитата:
|
рони,
Понял) Вот скрипт: function str_rand() { var result = '', words = '1234567890qwertyuioplkjhgfdsazxcvbnm'; for( var i = 0; i < 6; ++i ) { result += words.charAt( Math.floor( Math.random() * words.length ) ); } return result; } var result = localStorage.getItem('result') || str_rand(); localStorage.setItem('result', result ); Он срабатывает при клике на кнопку. В результате str_rand() создает рандомное значение, и это значение заноситься в localStorage. То есть один раз нажали на кнопку, получили значение записали в localStorage, дальше можем кликать на эту кнопку хоть 100 раз, str_rand() продолжит создавать каждый раз новые рандомы, но в localStorage они уже не попадают, туда записалось и сохранилось только первое значение которое с генерировал str_rand(). А сегодня у меня появилась задача добиться обратного эффекта, то есть что бы при каждом клике на кнопку значение в localStorage обновлялось, и в результате сохранилось там только то значение которое было сгенерировано при последнем клике |
smart-create,
строку 9 перенесите в конец 5, строку 8 продублируйте в том месте где идёт использование. если что-то не так, пишите макет, иначе к ванге. |
рони,
Разобрался, большое спасибо) Наконец то с этим покончено) |
Часовой пояс GMT +3, время: 13:54. |