views:

46

answers:

3

I am new to javascript and I came across these functions which, I believe, are for storing a cookie with a name in it (the name being 'value'). I just don't understand it! The functions are as follows:

Making the cookie

function setCookie(c_name, value, expiredays) {
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

Checking wether there is a cookie stored or not

function getCookie(c_name) {
    if (document.cookie.length>0) {
        c_start=document.cookie.indexOf(c_name + "=");
        if (c_start!=-1) {
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";", c_start);
                if (c_end==-1) c_end=document.cookie.length;
                return unescape(document.cookie.substring(c_start,c_end));
            }
        }
    return "";
}

There's also a function for displaying a alert-box with the value stored in the cookie, but I'm too lazy to write it down! (I found it in a book)

EDIT: I decided to write the last function which displays a welcome message if the cookie is stored and displays a prompt box if it's not set

Is it set? If so, do "foo". If not, do "bar"

function checkCookie() {
username=getCookie('username');
    if (username!=null && username!="") {
    alert('Welcome again ' + username + '!');
    } else {
    username=prompt("Please enter your name:","");
        if (username!=null && username!="") {
        setCookie('username', username,365);
        }
    }
}
+2  A: 

The document's cookies are stored in a long cookie string. These functions parse out the separate cookie values. See this page for an explanation of how the string is structured.

Pekka
+1  A: 

You will probably want to read a little bit on what cookies are and how they work.

In the cookie you have name:value pairs of the actual data and some metadata, such as the cookies expiration date.

Matti
+2  A: 

Making the cookie:

Let's say you want to set a cookie called "favoriteColor" with the value "blue" that expires in a week. The code you want to run is

document.cookie="favoriteColor=blue;expires=Mon, 16 Aug 2010 23:59:59 GMT";

The function setCookie that you posted is designed to generate that line of code. It generates the date based on the period you give it, it escapes the text of the value, and concatenates the results to create the document.cookie string.

The only remaining tricky bit is that the expiredays parameter is optional; the line that creates the document.cookie string includes a conditional that checks whether expiredays exists, and doesn't include the "expires" part of the string if expiredays doesn't exist. This uses the "ternary operator": (expiredays==null) ? "" : ";expires="+exdate.toGMTString() means "if expiredays is null, use the empty string, otherwise use ';expires="+exdate.toGMTString()'".

The second piece of code you posted is looking for the cookie by searching the set of cookies (which is a single string) for the name given (followed by =) and returning the text from that point up to the next semicolon. So it can pick "blue" out of

"favoriteBand=Foreigner;favoriteColor=blue;favoriteFood=sushi;".

JacobM
Thank you, this was very helpful :)
Latze