Javascript set then display a cookie value - javascript

My problem seems to be easy but I can't make it work; I want to set a cookie variable called "splash" then display it (later I want use in IF clause)
Here is my code :
<html>
<head>
<script type="text/javascript">
document.cookie = "splash=" + encodeURIComponent("blue theme")
var re = new RegExp(splash + "=([^;]+)");
var value = re.exec(document.cookie);
alert(value);
</script>
</head>
<body>
</body>
</html>

You should change your regex to include splash as part of the quoted string. Even though spash is the variable you're using in the cookie, it does not automatically become a javascript variable.
document.cookie = "splash=" + encodeURIComponent("blue theme")
var re = new RegExp("splash=([^;]+)");
var theme = re.exec(document.cookie)[1];
re.exec returns an array. the first element is the entire matched string (including splash=). The second is your capture group (blue%20theme).

Use Following function to set and get Cookie
function createCookie(name, value, days)
{
if(days)
{
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else
{
var expires = "";
}
var fixedName = '';
name = fixedName + name;
document.cookie = name + "=" + value + expires + "; path=/";
}
function getCookie(name)
{
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
function eraseCookie(name)
{
createCookie(name, "", -1);
}

Related

Create an array of id's in cookie JS

I want to update the cookie from my WP page with the post id's that the user is visiting. But my problem is that each time the value from the array is deleted and the array contains always just on id, and the next id's are just overwited.
let post_id = my_script_vars.postID; // this is a variable with some id's
let arr = [] // i create an array
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
index = arr.indexOf(post_id);
if (index == -1) { // if the id is not in the array the push it
arr.push(post_id);
} else { // if it is in array then keep all of them
arr.splice(index, 1);
}
setCookie("id_film",JSON.stringify(arr),30);
and i want my array to keep all the id's and not just one.
Follow these steps:
Don't create your arr variable until you need it
Add a function to read cookie and return contents as JSON
On page load, read the cookie, update your array, then save new contents
Final code should see like this:
let post_id = my_script_vars.postID; // this is a variable with some id's
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
// Function to read cookie and return as JSON
function getCookie(name) {
let a = `; ${document.cookie}`.match(`;\\s*${name}=([^;]+)`);
return a ? JSON.parse(a[1]) : [];
}
// Be sure to execute after DOM is loaded
window.addEventListener('load', function() {
// Get saved IDs
let arr = getCookie('id_film');
index = arr.indexOf(post_id);
if (index == -1) {
// if the id is not in the array the push it
arr.push(post_id);
}
setCookie("id_film",JSON.stringify(arr),30);
});

Is this javascript code valid? And is it efficient? Trying to create a javascript user ID and a session ID

Im trying to create my own analytics script for my website, and for this I have tried to put together a way to create userID and sessionID.
But I am not sure if I have done it correctly.
I'm trying to:
Check to see if user has set a userID - if not set it.
check to see if user has a sessionID - it not set it.
the userID is set to follow the user, where the user continues to hold the userID on several visits, where the sessionID is unique for each visit.
if (getCookie('yb_uid') != null) {
if (getCookie('yb_sid') != null) {
setCookie('yb_uid', getCookie('yb_uid'), 730);
setSessionCookie(getCookie('yb_sid'));
} else {
setCookie('yb_uid', getCookie('yb_uid'), 730);
setSessionCookie(setSID());
}
} else {
setCookie('yb_uid', setUID(), 730);
setSessionCookie(setSID());
}
if (getCookie('yb_sid') == null || getCookie('yb_sid') ==
'undefined' || !getCookie('yb_sid')) {
setSessionCookie(setSID());
}
function setUID() {
return "ybID#" + _setID(5) + "-" + _setID(5) + "-" + Date.now();
}
function setSessionCookie(value) {
var now = new Date();
var minutes = 30;
now.setTime(now.getTime() + (minutes * 60 * 1000));
document.cookie = "yb_sid=" + value + "; max-age=" + now.toUTCString() + "; expires=" + now.toUTCString() + "; path=/";
} /*set session cookie*/
function getCookie(name) {
var re = new RegExp(name + "=([^;]+)");
var value = re.exec(document.cookie);
return (value != null) ? unescape(value[1]) : null;
} /* get cookie value */
function _setID(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
function setSID() {
var ts = Math.round(+new Date() + Math.random() / 1000);
return ts;
}
function setCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
var expires = "; max-age=" + date.toGMTString() + " expires=" + date.toGMTString();
} else {
var expires = "";
}
document.cookie = name + "=" + value + expires + ";path=/";
Maybe this has an even easier way to script it?
Have you tried UUID https://www.npmjs.com/package/uuid for generating an user id?

How can I set a button to create a cookie with an increased numerical name and unique value (based on a variable) each time it is clicked?

I am trying to create a button that creates a new cookie with an increased numeric value as it's name and a different value (which comes from a variable), each time it is clicked. But, I can't get it to work.
This is what I have:
var date = new Date()
date.setTime(date.getTime() + 7*24*60*60*1000);
var num=1;
function addCookie() {
var expString = "; expires=" + date.toGMTString();
var cookievalue=escape(document.button.addpart.value) + ";";
document.cookie=num + "=" + cookievalue + expString + "; path=/my-quote/";
num++;
}
Then the html is:
<button name="addpart"; value="<?php $pn ?>"; onclick='addCookie()'>ADD</button>
I started with the following code (which worked, but just created a new cookie with the name 1 and value 1, then 2 and 2, 3 and 3 etc. I adapted it, so I think that's where I have gone wrong or missed something:
var num=1;
function addCookie() {
document.cookie=num+"="+num;
num++;
}
Updated code
var date = new Date() date.setTime(date.getTime() + 7 * 24 * 60 * 60 * 1000);
var num = 1;
function addCookie() {
var expString = "; expires=" + date.toGMTString();
var cookievalue = escape(document.querySelector("[name=addpart]").value) + ";";
document.cookie = num + "=" + cookievalue + expString + "; path=/my-quote/";
}

Multiple values on one cookie

The code I wrote should store multiple user values on one cookie, but for some reason it's not working. Can anyone care to explain my mistake?
var delimiter = "#";
function createCookie(name, value, days, path, domain, secure) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = date.toGMTString();
} else var expires = "";
cookieString = name + "=" + escape(value);
if (expires)
cookieString += "; expires=" + expires;
if (path)
cookieString += "; path=" + escape(path);
if (domain)
cookieString += "; domain=" + escape(domain);
if (secure)
cookieString += "; secure";
document.cookie = cookieString;
}
function getCookie(name) {
var nameEquals = name + "=";
var whole_cookie = document.cookie.split(nameEquals)[1].split(";")[0];
var crumbs = whole_cookie.split(delimiter);
}
function deleteCookie(name) {
createCookie(name, "", -1);
}
function myCookie() {
var name = document.getElementById('name').value;
var age = document.getElementById('age').value;
var userdata = name + delimiter + age;
createCookie("user", userdata);
var myUser = getCookie('user');
var myUserArray = myUser.split(delimiter);
var cookieName = myUserArray[0];
var cookieAge = myUserArray[1];
alert('The cookie created has the following user information stored on it: \nName: ' + cookieName '\nAge: ' + cookieAge);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
Please enter your name
<input type=text id='name' />
<br>
<br>Please enter your age
<input type=text id='name' />
<input type=button value='Go!' onClick='myCookie()' />
There are a couple of mistakes in your code:
In getCookie, you forgot to return the value of your cookie !
function getCookie(name) {
var nameEquals = name + "=";
var whole_cookie=document.cookie.split(nameEquals)[1].split(";")[0];
return whole_cookie;
}
You have two inputs with id name, I think you want to rename one of them to age.
Make sure your document is fully loaded before you try to execute your Javascript! Either do that by wrapping your code around document.body.onload = function(){ [your code here] }, or by moving your <script> tag at the end of your document.
You are missing a + between cookieName and '\nAge' in your alert.
var delimiter = "#";
function createCookie(name, value, days, path, domain, secure) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = date.toGMTString();
} else var expires = "";
cookieString = name + "=" + escape(value);
if (expires)
cookieString += "; expires=" + expires;
if (path)
cookieString += "; path=" + escape(path);
if (domain)
cookieString += "; domain=" + escape(domain);
if (secure)
cookieString += "; secure";
document.cookie = cookieString;
}
function getCookie(name) {
var nameEquals = name + "=";
var whole_cookie = document.cookie.split(nameEquals)[1].split(";")[0];
return whole_cookie;
}
function deleteCookie(name) {
createCookie(name, "", -1);
}
function myCookie() {
var name = document.getElementById('name').value;
var age = document.getElementById('age').value;
var userdata = name + delimiter + age;
createCookie("user", userdata);
var myUser = getCookie('user');
var myUserArray = myUser.split(delimiter);
var cookieName = myUserArray[0];
var cookieAge = myUserArray[1];
alert('The cookie created has the following user information stored on it: \nName: ' + cookieName + '\nAge: ' + cookieAge);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
Please enter your name
<input type=text id='age' />
<br>
<br>Please enter your age
<input type=text id='name' />
<input type=button value='Go!' onClick='myCookie()' />

Cuts off form data when setting url as value

This script creates a cookie depending on form data, (ex: ?docname=My Document)
<script type="text/javascript">
{
var docname = getValue("docname"); // these go off another script to get form data
var save = getValue("save");
var url = window.location.href;
}
function setCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}
function saveDoc() {
if (docname != '') {
setCookie(docname,url,730);
}
else {
// Nothing else to do
}
}
// Helps to find errors if they exist
window.onerror = function(errorMessage, url, line) {
var errorText = 'message: ' + errorMessage + '\nurl: ' + url + '\nline: ' + line + ' please contact us, and report this error.';
alert(errorText);
}
</script>
It creates the cookie and sets the name of it as the docname variable, but when it sets the url as the value, it cuts off the form data.
I've researched and changed the code but couldn't find an answer, can anyone help?
Solution
<script type="text/javascript">
{
var docname = getValue("docname"); // these go off another script to get form data
var save = getValue("save");
var url = window.location.href;
var recode = encodeURIComponent(url);
}
function setCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}
function saveDoc() {
if (docname != '') {
setCookie(docname,recode,730);
}
else {
// Nothing else to do
}
}
// Helps to find errors if they exist
window.onerror = function(errorMessage, url, line) {
var errorText = 'message: ' + errorMessage + '\nurl: ' + url + '\nline: ' + line + ' please contact us, and report this error.';
alert(errorText);
}
</script>
changed the variable used to set the value to recode and set recode equal to encodeURIComponent(url); so it decodes the url, decoding it and making it possible to have form data in a value or name of a cookie, etc. Thanks to #epascarello
encodeURIComponent() is your friend here
document.cookie = name + "=" + encodeURIComponent(value) + expires + "; path=/";
and when you get it, you need to decode it with decodeURIComponent().

Categories