<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>El Blog del Antonio &#187; Cookies</title>
	<atom:link href="http://www.ramirezcobos.com/tag/cookies/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ramirezcobos.com</link>
	<description>Programming Web with PHP, CSS, Javascript and ∞</description>
	<lastBuildDate>Wed, 28 Dec 2011 18:26:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Cookies on Roids -JSON Based</title>
		<link>http://www.ramirezcobos.com/2010/01/01/cookies-on-roids/</link>
		<comments>http://www.ramirezcobos.com/2010/01/01/cookies-on-roids/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 21:13:25 +0000</pubDate>
		<dc:creator>Antonio Ramirez</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Cookies]]></category>
		<guid isPermaLink="false">http://www.ramirezcobos.com/?p=142</guid>
		<description><![CDATA[Every Web programmer, one day or another, works with cookies. Some of us prefer to use server side cookies, others client cookies, and also both, client and server cookies. On my older blogspot blog, one that I even really care to update everyday as I do with this one, I post one class to work with  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ramirezcobos.com/wp-content/uploads/2010/01/cookies.jpg"><img class="alignright size-medium wp-image-144" style="border: 3px solid #ddd; margin: 5px;" title="cookies" src="http://www.ramirezcobos.com/wp-content/uploads/2010/01/cookies-300x168.jpg" alt="" width="300" height="168" /></a>Every Web programmer, one day or another, works with cookies. Some of us prefer to use server side cookies, others client cookies, and also both, client and server cookies. On my older blogspot blog, one that I even really care to update everyday as I do with this one, I post one class to work with cookies on the client side and one fellow programmer told me about <a href="http://www.lalit.org/lab/jsoncookies">json cookies</a>. I thought it was a great script and that was because by using JSON (thanks David Crockford again!) encoding we could save objects and arrays of information into our good friends &#8216;cookies&#8217;.</p>
<p>Well, on my last post, I have included a JSON Plugin script to use with JQuery. By making a couple of modifications I have created a Cookie and JSON javascript objects to provide you with the possibility to save objects and arrays on cookies. Both of the objects do not require any other dependency library&#8230;</p>
<p><strong>Here is the script:</strong></p>
<p>
<pre class="brush: jscript; title: ; notranslate">&lt;br /&gt;
var JSON = {&lt;br /&gt;
    useHasOwn : ({}.hasOwnProperty ? true : false),&lt;br /&gt;
  	pad : function(n) {&lt;br /&gt;
        return n &amp;lt; 10 ? &amp;quot;0&amp;quot; + n : n;&lt;br /&gt;
    },&lt;br /&gt;
    m : {&lt;br /&gt;
        &amp;quot;\b&amp;quot;: '\\b',&lt;br /&gt;
        &amp;quot;\t&amp;quot;: '\\t',&lt;br /&gt;
        &amp;quot;\n&amp;quot;: '\\n',&lt;br /&gt;
        &amp;quot;\f&amp;quot;: '\\f',&lt;br /&gt;
        &amp;quot;\r&amp;quot;: '\\r',&lt;br /&gt;
        '&amp;quot;' : '\\&amp;quot;',&lt;br /&gt;
        &amp;quot;\\&amp;quot;: '\\\\'&lt;br /&gt;
    },&lt;br /&gt;
    encodeString : function(s){&lt;br /&gt;
        if (/[&amp;quot;\\\x00-\x1f]/.test(s)) {&lt;br /&gt;
            return '&amp;quot;' + s.replace(/([\x00-\x1f\\&amp;quot;])/g, function(a, b) {&lt;br /&gt;
                var c = m[b];&lt;br /&gt;
                if(c){&lt;br /&gt;
                    return c;&lt;br /&gt;
                }&lt;br /&gt;
                c = b.charCodeAt();&lt;br /&gt;
                return &amp;quot;\\u00&amp;quot; +&lt;br /&gt;
                    Math.floor(c / 16).toString(16) +&lt;br /&gt;
                    (c % 16).toString(16);&lt;br /&gt;
            }) + '&amp;quot;';&lt;br /&gt;
        }&lt;br /&gt;
        return '&amp;quot;' + s + '&amp;quot;';&lt;br /&gt;
    },&lt;br /&gt;
    encodeArray : function(o){&lt;br /&gt;
        var a = [&amp;quot;[&amp;quot;], b, i, l = o.length, v;&lt;br /&gt;
            for (i = 0; i &amp;lt; l; i += 1) {&lt;br /&gt;
                v = o[i];&lt;br /&gt;
                switch (typeof v) {&lt;br /&gt;
                    case &amp;quot;undefined&amp;quot;:&lt;br /&gt;
                    case &amp;quot;function&amp;quot;:&lt;br /&gt;
                    case &amp;quot;unknown&amp;quot;:&lt;br /&gt;
                        break;&lt;br /&gt;
                    default:&lt;br /&gt;
                        if (b) {&lt;br /&gt;
                            a.push(',');&lt;br /&gt;
                        }&lt;br /&gt;
                        a.push(v === null ? &amp;quot;null&amp;quot; : JSON.encode(v));&lt;br /&gt;
                        b = true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            a.push(&amp;quot;]&amp;quot;);&lt;br /&gt;
            return a.join(&amp;quot;&amp;quot;);&lt;br /&gt;
    },&lt;br /&gt;
    encodeDate : function(o){&lt;br /&gt;
        return '&amp;quot;' + o.getFullYear() + &amp;quot;-&amp;quot; +&lt;br /&gt;
                pad(o.getMonth() + 1) + &amp;quot;-&amp;quot; +&lt;br /&gt;
                pad(o.getDate()) + &amp;quot;T&amp;quot; +&lt;br /&gt;
                pad(o.getHours()) + &amp;quot;:&amp;quot; +&lt;br /&gt;
                pad(o.getMinutes()) + &amp;quot;:&amp;quot; +&lt;br /&gt;
                pad(o.getSeconds()) + '&amp;quot;';&lt;br /&gt;
    },&lt;br /&gt;
    encode : function(o){&lt;br /&gt;
        if(typeof o == &amp;quot;undefined&amp;quot; || o === null){&lt;br /&gt;
            return &amp;quot;null&amp;quot;;&lt;br /&gt;
        }else if(o instanceof Array){&lt;br /&gt;
            return JSON.encodeArray(o);&lt;br /&gt;
        }else if(o instanceof Date){&lt;br /&gt;
            return JSON.encodeDate(o);&lt;br /&gt;
        }else if(typeof o == &amp;quot;string&amp;quot;){&lt;br /&gt;
            return JSON.encodeString(o);&lt;br /&gt;
        }else if(typeof o == &amp;quot;number&amp;quot;){&lt;br /&gt;
            return isFinite(o) ? String(o) : &amp;quot;null&amp;quot;;&lt;br /&gt;
        }else if(typeof o == &amp;quot;boolean&amp;quot;){&lt;br /&gt;
            return String(o);&lt;br /&gt;
        }else {&lt;br /&gt;
            var a = [&amp;quot;{&amp;quot;], b, i, v;&lt;br /&gt;
            for (i in o) {&lt;br /&gt;
                if(!JSON.useHasOwn || o.hasOwnProperty(i)) {&lt;br /&gt;
                    v = o[i];&lt;br /&gt;
                    switch (typeof v) {&lt;br /&gt;
                    case &amp;quot;undefined&amp;quot;:&lt;br /&gt;
                    case &amp;quot;function&amp;quot;:&lt;br /&gt;
                    case &amp;quot;unknown&amp;quot;:&lt;br /&gt;
                        break;&lt;br /&gt;
                    default:&lt;br /&gt;
                        if(b){&lt;br /&gt;
                            a.push(',');&lt;br /&gt;
                        }&lt;br /&gt;
                        a.push(JSON.encode(i), &amp;quot;:&amp;quot;,&lt;br /&gt;
                                v === null ? &amp;quot;null&amp;quot; : JSON.encode(v));&lt;br /&gt;
                        b = true;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            a.push(&amp;quot;}&amp;quot;);&lt;br /&gt;
            return a.join(&amp;quot;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    decode : function(json){&lt;br /&gt;
        return eval(&amp;quot;(&amp;quot; + json + ')');&lt;br /&gt;
    }&lt;br /&gt;
};&lt;/p&gt;
&lt;p&gt;var Cookie = {&lt;br /&gt;
	jsonencode : JSON.encode,&lt;br /&gt;
	jsondecode : JSON.decode,&lt;/p&gt;
&lt;p&gt;   	set : function(name,value,options){&lt;/p&gt;
&lt;p&gt;   		options = this.extend({}, options);&lt;/p&gt;
&lt;p&gt;        if (value === null) {&lt;br /&gt;
            value = '';&lt;br /&gt;
            options.expires = -1;&lt;br /&gt;
        }&lt;br /&gt;
        var expires = '';&lt;br /&gt;
        if (options.expires &amp;amp;&amp;amp; (typeof options.expires == 'number' || options.expires.toUTCString)) {&lt;br /&gt;
            var date;&lt;br /&gt;
            if (typeof options.expires == 'number') {&lt;br /&gt;
                date = new Date();&lt;br /&gt;
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));&lt;br /&gt;
            } else {&lt;br /&gt;
                date = options.expires;&lt;br /&gt;
            }&lt;br /&gt;
            expires = '; expires=' + date.toUTCString();&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        var self = this;&lt;/p&gt;
&lt;p&gt;  		value = options.json ? encodeURIComponent(Cookie.jsonencode(value)):encodeURIComponent(value);&lt;/p&gt;
&lt;p&gt;        var path = options.path ? '; path=' + (options.path) : '';&lt;br /&gt;
        var domain = options.domain ? '; domain=' + (options.domain) : '';&lt;br /&gt;
        var secure = options.secure ? '; secure' : '';&lt;/p&gt;
&lt;p&gt;        document.cookie = [name, '=', value, expires, path, domain, secure].join('');&lt;br /&gt;
	},&lt;br /&gt;
	get : function(name,json){&lt;/p&gt;
&lt;p&gt;		var cookieValue = null;&lt;/p&gt;
&lt;p&gt;        if (document.cookie &amp;amp;&amp;amp; document.cookie != '') {&lt;br /&gt;
            var cookies = document.cookie.split(';');&lt;br /&gt;
            for (var i = 0; i &amp;lt; cookies.length; i++) {&lt;br /&gt;
                var cookie = this.trim(cookies[i]);&lt;br /&gt;
                // Does this cookie string begin with the name we want?&lt;br /&gt;
                if (cookie.substring(0, name.length + 1) == (name + '=')) {&lt;br /&gt;
                    cookieValue = json ? this.jsondecode(decodeURIComponent(cookie.substring(name.length + 1))):decodeURIComponent(cookie.substring(name.length + 1));&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        return cookieValue;&lt;/p&gt;
&lt;p&gt;	},&lt;br /&gt;
	unset: function(name){&lt;br /&gt;
		Cookie.set(name,'',-1);&lt;br /&gt;
	},&lt;br /&gt;
	trim: function( val ) {&lt;br /&gt;
		return (val || &amp;quot;&amp;quot;).replace( /^\s+|\s+$/g, &amp;quot;&amp;quot; );&lt;br /&gt;
	},&lt;br /&gt;
	extend: function()&lt;br /&gt;
	{&lt;br /&gt;
		var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;&lt;br /&gt;
		if ( typeof target === &amp;quot;boolean&amp;quot; ) {&lt;br /&gt;
			deep = target;&lt;br /&gt;
			target = arguments[1] || {};&lt;br /&gt;
			i = 2;&lt;br /&gt;
		}&lt;br /&gt;
		if ( typeof target !== &amp;quot;object&amp;quot; &amp;amp;&amp;amp; !isFunction(target) )&lt;br /&gt;
			target = {};&lt;br /&gt;
		if ( length == i ) {&lt;br /&gt;
			target = this;&lt;br /&gt;
			--i;&lt;br /&gt;
		}&lt;br /&gt;
		for ( ; i &amp;lt; length; i++ )&lt;br /&gt;
			if ( (options = arguments[ i ]) != null )&lt;br /&gt;
				for ( var name in options ) {&lt;br /&gt;
					var src = target[ name ], copy = options[ name ];&lt;/p&gt;
&lt;p&gt;					if ( target === copy )&lt;br /&gt;
						continue;&lt;/p&gt;
&lt;p&gt;					if ( deep &amp;amp;&amp;amp; copy &amp;amp;&amp;amp; typeof copy === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; !copy.nodeType )&lt;br /&gt;
						target[ name ] = this.extend( deep,&lt;br /&gt;
							src || ( copy.length != null ? [ ] : { } )&lt;br /&gt;
						, copy );&lt;/p&gt;
&lt;p&gt;					else if ( copy !== undefined )&lt;br /&gt;
						target[ name ] = copy;&lt;/p&gt;
&lt;p&gt;				}&lt;br /&gt;
		return target;&lt;br /&gt;
	},&lt;br /&gt;
	isFunction: function(obj){&lt;br /&gt;
		return toString.call(obj) === &amp;quot;[object Function]&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
</pre>
</p>
<p>As you can see above, I have included a couple of methods that allow me to extend the options of the object at will (thanks jQuery). I believe that you will find it quite useful to extend its functionality. Any ideas will be highly appreciated.</p>
<p><strong>How to use it</strong></p>
<p>
<pre class="brush: jscript; title: ; notranslate">&lt;/p&gt;
&lt;p&gt;// Create a cookie with the given name and value and other optional parameters.&lt;br /&gt;
//&lt;br /&gt;
// session cookie -no json&lt;br /&gt;
Cookie.set('the_cookie_name', 'the_value');&lt;/p&gt;
&lt;p&gt;// get cookie (no json):&lt;br /&gt;
var cv = Cookie.get('the_cookie_name');&lt;/p&gt;
&lt;p&gt;// session cookie -json, the value can be an object or an array too&lt;br /&gt;
Cookie.set('the_cookie_name', 'the_value', {json:true});&lt;/p&gt;
&lt;p&gt;// get the cookie (json)&lt;br /&gt;
var cv = Cookie.get('the_cookie_name',true);&lt;/p&gt;
&lt;p&gt;// Secured cookie, expiring in 14 days&lt;br /&gt;
Cookie.set('the_cookie_name', 'the_value', { expires: 14, path: '/', domain: 'yourdomain.com', secure: true });&lt;/p&gt;
&lt;p&gt;// Deleting a cookie&lt;br /&gt;
Cookie.unset('the_cookie_name', null);&lt;/p&gt;
&lt;p&gt;</pre>
</p>
<p><strong>DOWNLOAD</strong></p>
<div style="padding: 10px; text-align: center; background-color: #ffffff; border: 3px solid #dddddd;"><table style="border: 1px solid #CCC;" cellpadding="3" width="100%">
  <tr>
    <td width="35">
      <img src="http://www.ramirezcobos.com/wp-content/plugins/downloads-manager/img/icons/default.gif" alt="http://www.ramirezcobos.com/wp-content/plugins/downloads-manager/img/icons/default.gif">
    </td>
    <td>
      <b>download:</b> <a href="http://www.ramirezcobos.com/?file_id=5">Cookies on Roids</a> <small>(2.18KB)</small><br />
      <b>added:</b> 01/01/2010 <br />
      <b>clicks:</b> 768 <br />
    </td>
  </tr>
</table></div>
<p><center><br />
<script type="text/javascript"><!--
google_ad_client = "pub-7060132287364604";
/* 468x60, creado 16/03/10 */
google_ad_slot = "9029910384";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
</center></p>
<a href="http://twitter.com/?status=RT%20%40%3A%20Cookies%20on%20Roids%20-JSON%20Based%20-%20El%20Blog%20del%20Antonio%20http%3A%2F%2Fwww.ramirezcobos.com%2F2010%2F01%2F01%2Fcookies-on-roids%2F" class="tweet-this" ><img src="http://www.ramirezcobos.com/wp-content/plugins/simple-tweet/img/tweet.gif" title="Tweet this!" alt="Tweet this!" />Tweet this!</a>]]></content:encoded>
			<wfw:commentRss>http://www.ramirezcobos.com/2010/01/01/cookies-on-roids/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: www.ramirezcobos.com @ 2012-02-06 18:30:23 by W3 Total Cache -->
