Jump to content

Cookie Paths


Jesdisciple

Recommended Posts

The background for this problem is at this other thread. I made a Cookie class based on http://www.quirksmode.org/js/cookies.html and included it on three pages. My problem is that after the "Go back." link is clicked all other pages redirect to index.html even though I've tried to erase all cookies. The culprit seems to be the cookie which uses the current directory as its path despite the instruction to use the server's document root. I can't figure out why some cookies obey and others don't. (I even tried setting the paths of all cookies to ./ but that's not translated to the current directory.) I've experienced this behavior in Firefox and Opera. Konquerer creates the misbehaving cookie when I click "Go back." but doesn't obey history.back. Any ideas?Cookie.js

function Cookie(name, value, days){    this.name = name;    if(typeof value !== 'undefined')        this.set(value, days);}Cookie.prototype = {    set: function (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 = this.name + '=' + value + expires + '; path=/';    },    get: function (){        var nameEQ = this.name + "=";        var ca = document.cookie.split(';');        for(var i = 0; i < ca.length; i++) {            var c = ca[i];            while (c.charAt(0) === ' ')                c = c.substring(1, c.length);                        if (c.indexOf(nameEQ) == 0)                return c.substring(nameEQ.length, c.length);        }        return null;    },    erase: function (){        this.set('', -1);    }};

index.html

<html>    <head>        <title>Titled Document</title>        <script type="text/javascript" src="Cookie.js"></script>        <script type="text/javascript">            (function (){ // will execute immediately                var cookie = new Cookie('back');                if(cookie.get() !== null)                    cookie.erase();            })();        </script>    </head>    <body>        <a href="test1.html">Test 1</a> <a href="test2.html">Test 2</a>    </body></html>

test1.html and test2.html

<html>    <head>        <title>Titled Document</title>        <script type="text/javascript" src="Cookie.js"></script>        <script type="text/javascript">            (function (){ // will execute immediately                var limit = 10;                var cookie = new Cookie('back');                var back = parseInt(cookie.get());                if(!isNaN(back))                    if(back < limit){                        cookie.set(back + 1);                        history.back();                    }else                        cookie.erase();            })();        </script>    </head>    <body>        <a href="test1.html">Test 1</a> <a href="test2.html">Test 2</a> <a id="back">To go back, click your browser's "Back" button.</a>                <script type="text/javascript">            Element.prototype.on = function (action, response, capturing){                var listener = 'on' + action;                this[listener] = response;                var w3c = 'addEventListener';                var ie = 'attachEvent';                if(typeof this[w3c] === 'function')                    this[w3c](action, response, !!capturing);                else if(typeof this[ie] === 'function')                    this[ie](listener, response);            };            (function (){ // will execute immediately                var back = document.getElementById('back');                back.on('click', function(event){                        document.cookie = 'back=0;';                        history.back();                        return false;                    });                back.innerHTML = 'Go back.';                back.href = '#back';            })();        </script>    </body></html>

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...