JavaScript cookies not working on sub-domains - javascript

I have a cookie authorization banner, with a button labeled 'Got it!' that dismisses it. I do that by setting a cookie.
To set a cookie, I have this in my <head>:
<script>
function setCookie(cname, cvalue, exdays)
{
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
var domain = ".brokenhearts.ml";
var security = "secure";
var location = "/";
document.cookie = cname + "=" + cvalue + ";" + expires + ";" + location + ";" + domain + ";" + security;
}
</script>
and I've set this to be executed when the button is clicked:
var privacyValue = "yes";
setCookie("privacy", privacyValue, 365);
The problem is, when I check for the cookie in Chrome, it shows me something like this:
As you can see, the cookie is getting set only for www.brokenhearts.ml and not for its sub-domains. I want the cookie to be set for all sub-domains.
I tried setting the cookie with the domain as "brokenhearts.ml" and it still gets set only for www.brokenhearts.ml.

When setting up the cookie, your domain must be in format of .domain.com – dot and root domain and path=/, always.
If you don't set path=/, auto path will be saved as from where the cookies is being saved - hence it wont be accessible across any subdomain.
//variables
var LastReportGenerated="Jul 11 2013",
baseDomain = '.cssjunction.com',
expireAfter = new Date();
//setting up cookie expire date after a week
expireAfter.setDate(expireAfter.getDate() + 7);
//now setup cookie
document.cookie="Report={'ReportName':'MainReport', 'lastGenerated':" + LastReportGenerated + "}; domain=" + baseDomain + "; expires=" + expireAfter + "; path=/";
Source:
How to set cookies to share across all subdomains using JavaScript

Related

document.cookie can't be set in Chrome

I want to save a cookie using simple javascript. So I went to w3 and they have a ready made function to save a cookie. When I tried this code in firefox it worked exactly as expected, but in Chrome setting the cookie had no effect. I saw other questions on this site where the cookie was deleted because of a lack of expiredate, but I both set a date for a few days later and document.cookie never gets set. I walked through the code line by line in the debugger, but the value of document.cookie stayed an empty string even right after the line :
document.cookie = cname + "=" + cvalue + ", " + expires + ", path=/ ;";
I've tried this with and without a path and or expiration date, but nothing seems to have an effect. What should I do?
Some extra information about my files as requested by #AndrewL64:
I made a 1 page html game. I have a index.html file, a mainstyle.css file and a main.js file for the script. In my script I use JQuery to manipulate the DOM elements. I put the code in the on page load event like this:
//==================On Page Load ===================================
$(document).ready(function () {
$("#gameContainer").hide();
$("#mainContainer").hide();
//$("#startContainer").hide();
$("#skillsContainer").hide();
prepareGame();
//startGame();
/*var cookieName = "sp_str_cookie_save1";
var saveString = "some value";
setCookie(cookieName, saveString, 10);
var cookieResult = getCookie(cookieName);*/
const cname = "someCookie";
const expires = "Thu, 2 Aug 2020 20:47:11 UTC";
const cvalue = "someValue";
document.cookie = cname + "= " + cvalue + "; " + "expires=" + expires + "; " + "path=/";
});
I found the answer in another Stackoverflow question here. In short, some browsers don't set cookies when opening a html file locally. For example Chrome doesn't, but Firefox does. So test cookies in Firefox if you are working offline.
The parameters should be separated with a semicolon and a white-space, not a comma.
Change your current code from this:
document.cookie = cname + "=" + cvalue + ", " + expires + ", path=/ ;";
To this:
document.cookie = cname + "= " + cvalue + "; " + expires + "; " + "path=/";
Check and run this JSFiddle which has the following Code Snippet and then check your browser cookies to see the new cookie added:
const cname = "someCookie";
const expires = "Thu, 2 Aug 2020 20:47:11 UTC";
const cvalue = "someValue";
document.cookie = cname + "= " + cvalue + "; " + "expires=" + expires + "; " + "path=/";
N.B. The above Code Snippet won't set the cookie since the snippet environment is just a sandbox and lacks the 'allow-same-origin' flag. Check the JSFiddle to see the above JavaScript add the cookie to your browser.

JavaScript - Setting Domain of Cookie to IP Address With Port

I am using a script that creates multiple cookies based off what a users submits through a form. When I attempt to process the data and create a cookie, no cookie is made using my local IP address such as 192.176.22.36 . Yet when I use a domain like example.com no cookie is created. There is no issue with my IP as the window.location works perfectly.
Below is the script I am using:
document.cookie = "entrees=" + entrees + " ; path=/; domain=192.176.22.36:8082";
document.cookie = "fruitsVegetables1=" + fruitsVegetablesArray[0] + "; path=/; domain=192.176.22.36:8082";
if (fruitsVegetablesArray[1] != null) {
document.cookie = "fruitsVegetables2=" + fruitsVegetablesArray[1] + "; path=/; domain=192.176.22.36:8082";
}
document.cookie = "beverages=" + beverages + "; path=/; domain=192.176.22.36:8082";
// Disable Orders
document.cookie = "orderDisabled=true; path=/; domain=192.176.22.36:8082";
// Go to Order Placed page
event.preventDefault();
window.location = "http://192.176.22.36:8082/order-placed/";

Disabling a JavaScript function with a Cookie

I am working on a mobile part of my site and I would like to disable a welcome message which is produced by a JavaScript function when the page loads.
What I am trying to do is to disable that function with a cookie that has the expiration time of 20 minutes.
This is how far I've gotten with the cookie:
// c_name = cookie name
// c_value = cookie value
// ex_min = expiration in minutes
function setCookie(c_name, c_value, ex_min) {
var d = new Date();
d.setTime(d.getTime() + (ex_min*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = c_name + "=" + c_value + "; " + expires;
}
// Cookie that lasts for 20 minutes.
setCookie("last-visited", "1", 20);
What I can't figure out is how to disable that function from within the cookie.
And yes, the cookie is from w3schools.com.
Any help is appreciated.
Thanks.
I guess you need something like this
var lastVisitedCookieName = 'last-visited';
if (!document.cookie.contains(lastVisitedCookieName))
{
alert('Welcome');
setCookie(lastVisitedCookieName, "1", 20);
}

The cookie is deleted when the browser is closed

I have this cookie to store users previous selection from a menu. But I want keep this cookie stored in the browser even if the user closes the browser. This code perfectly works on IE but when I close Chrome and Firefox, the cookie getting deleted. Can anyone provide me solution for this.
function setCookie(NameOfCookie, value, expiredays) {
var ExpireDate = new Date();
document.cookie = NameOfCookie + "=" + escape(value) + ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());
}
function delCookie (NameOfCookie) {
if (getCookie(NameOfCookie)) {
document.cookie = NameOfCookie + "=" + "; expires=Thu, 17-Jul-24 00:00:01 GMT";
}
}
If you call the function with
setCookie('redirectcountry', 'CA')
then you set the expiry date to new Date(), that is "right now". So it's normal behavior to have the cookie be immediately deleted.
Simple solution : call it as
setCookie('redirectcountry', 'CA', true)
Did you check your browsers settings? In Firefox this is option called 'Keep until' with value 'I close Firefox' (Privacy tab).

Javascript "document.cookie" in Android?

I need help how to use correctly the javascript : "document.cookie" or
how to write cookie from javascript in Android web browser ?
I've make sure in the settings that cookie is enabled. When I checked
by using "navigator.cookieEnabled", it returns true as well.
I've a piece of javascript code as follow that has been working
everywhere
( e.g. PC browsers, iPhone ), but doesn't work in Android.
function createCookie(name) {
// cookies expired in 1 year.
var expDate = new Date();
expDate.setDate(expDate.getDate() + 365);
expDate = expDate.toGMTString();
var el = document.getElementById(name);
document.cookie = name + '=' + escape(el.value) + '; path=/ ;expires=' + expDate;
document.cookie = name + '-idx=' + escape(el.selectedIndex) + ';path=/ ; expires=' + expDate;
//alert('cookie : ' + document.cookie);
}
When I open the 'alert' comment in the last line of code, Android will
just show blank while
all other browsers show me the content of the cookie that I've just
written.
Please help.
Thanks.
I got this thing working, for Android 2.2, javascript's document.cookie works fine, just make sure that in your Webview...javascript is enabled like so:
yourWebViewVariable.getSettings().setJavaScriptEnabled(true);
for Android 3.1 just add this to your java file onLoadInit:
CookieManager.setAcceptFileSchemeCookies(true); //This is the line that specifically makes it work so the other lines is optional
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.acceptCookie();
Also, here's a few links that I found while I was trying to figure this error out, this could be helpful for others that wants to Send variables from Javascript to the Webview(Native Android Language) and Vise versa.
http://android-er.blogspot.com/2011/10/run-android-java-code-from-webpage.html
http://android-er.blogspot.com/2011/10/call-javascript-inside-webview-from.html
Thanks and Goodluck!
Ok, now I really got it (window.cookie, lol).
Just remove the space in the path definition. Seemed to work on my phone.
Edit: Put all the strings on one line too, I think it screwed up the parsing.
function createCookie(name) {
// cookies expired in 1 year.
var expDate = new Date();
expDate.setDate(expDate.getDate() + 365);
expDate = expDate.toGMTString();
var el = document.getElementById(name);
document.cookie = name + '=' + escape(el.value) + '; path=/; expires=' + expDate;
document.cookie = name + '-idx=' + escape(el.selectedIndex) + '; path=/; expires=' + expDate;
//alert('cookie : ' + document.cookie); }

Categories

Resources