Foros del Web » Programando para Internet » Javascript »

Cómo programar la duracion de las Cookies

Estas en el tema de Cómo programar la duracion de las Cookies en el foro de Javascript en Foros del Web. Hola amigos. Es una tontería lo que voy a preguntar pero he visto muchos ejemplos de códigos y todos son distintos, por lo que no ...
  #1 (permalink)  
Antiguo 13/12/2014, 14:40
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Cómo programar la duracion de las Cookies

Hola amigos.

Es una tontería lo que voy a preguntar pero he visto muchos ejemplos de códigos y todos son distintos, por lo que no se cómo darle un tiempo de expiración a las cookies de mi código.

De momento tengo este código:

Código:
            setCookie: function(name, days) {
                var date = new Date();
                date.setTime(+ date + (days * 864000));
                document.cookie = name + '=true; expires=' + date.toGMTString() + '; path=/';
            },
y en la línea que pone
Código:
date.setTime(+ date + (days * 864000)); 
según lo que entiendo es que esta cookie duraría 10 días, porque según veo un día tiene 86400 segundos y no estoy seguro de que esté puesto correctamente o es algo que yo me imagino.

¿Alguien me podría explicar si estoy en lo cierto?, sino me gustaría que me ayudaran a comprender cómo funciona o al menos para dejarlo en los 10 días de duración.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 13/12/2014, 15:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Cómo programar la duracion de las Cookies

De W3Schools:

Código Javascript:
Ver original
  1. function setCookie(cname, cvalue, exdays) {
  2.     var d = new Date();
  3.     d.setTime(d.getTime() + (exdays*24*60*60*1000));
  4.     var expires = "expires="+d.toUTCString();
  5.     document.cookie = cname + "=" + cvalue + "; " + expires;
  6. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 14/12/2014, 02:52
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Cómo programar la duracion de las Cookies

Hola W3Schools y gracias por responder, pero temo que este código me cree conflictos, ya que el código que puse en el primer mensaje era parte del archivo js que estoy usando.

Aquí dejo el código completo:

Código:
/*!
 * CoverPop 2.4.1
 * http://coverpopjs.com
 *
 * Copyright (c) 2014 Tyler Pearson
 * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
 */

(function (CoverPop, undefined) {

    'use strict';

    // set default settings
    var settings = {

            // set default cover id
            coverId: 'CoverPop-cover',

            // duration (in days) before it pops up again
            expires: 30,

            // close if someone clicks an element with this class and prevent default action
            closeClassNoDefault: 'CoverPop-close',

            // close if someone clicks an element with this class and continue default action
            closeClassDefault: 'CoverPop-close-go',

            // change the cookie name
            cookieName: '_CoverPop',

            // on popup open function callback
            onPopUpOpen: null,

            // on popup close function callback
            onPopUpClose: null,

            // hash to append to url to force display of popup
            forceHash: 'splash',

            // hash to append to url to delay popup for 1 day
            delayHash: 'go',

            // close if the user clicks escape
            closeOnEscape: true,

            // set an optional delay (in milliseconds) before showing the popup
            delay: 0
        },


        // grab the elements to be used
        $el = {
            html: document.getElementsByTagName('html')[0],
            cover: document.getElementById(settings.coverId),
            closeClassDefaultEls: document.querySelectorAll('.' + settings.closeClassDefault),
            closeClassNoDefaultEls: document.querySelectorAll('.' + settings.closeClassNoDefault)
        },


        /**
         * Helper methods
         */

        util = {

            hasClass: function(el, name) {
                return new RegExp('(\\s|^)' + name + '(\\s|$)').test(el.className);
            },

            addClass: function(el, name) {
                if (!util.hasClass(el, name)) {
                    el.className += (el.className ? ' ' : '') + name;
                }
            },

            removeClass: function(el, name) {
                if (util.hasClass(el, name)) {
                    el.className = el.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'), ' ').replace(/^\s+|\s+$/g, '');
                }
            },

            addListener: function(target, type, handler) {
                if (target.addEventListener) {
                    target.addEventListener(type, handler, false);
                } else if (target.attachEvent) {
                    target.attachEvent('on' + type, handler);
                }
            },

            removeListener: function(target, type, handler) {
                if (target.removeEventListener) {
                    target.removeEventListener(type, handler, false);
                } else if (target.detachEvent) {
                    target.detachEvent('on' + type, handler);
                }
            },

            isFunction: function(functionToCheck) {
                var getType = {};
                return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
            },

            setCookie: function(name, days) {
                var date = new Date();
                date.setTime(+ date + (days * 86400000));
                document.cookie = name + '=true; expires=' + date.toGMTString() + '; path=/';
            },

            hasCookie: function(name) {
                if (document.cookie.indexOf(name) !== -1) {
                    return true;
                }
                return false;
            },

            // check if there is a hash in the url
            hashExists: function(hash) {
                if (window.location.hash.indexOf(hash) !== -1) {
                    return true;
                }
                return false;
            },

            preventDefault: function(event) {
                if (event.preventDefault) {
                    event.preventDefault();
                } else {
                    event.returnValue = false;
                }
            },

            mergeObj: function(obj1, obj2) {
                for (var attr in obj2) {
                    obj1[attr] = obj2[attr];
                }
            }
        },


        /**
         * Private Methods
         */

        // close popup when user hits escape button
        onDocUp = function(e) {
            if (settings.closeOnEscape) {
                if (e.keyCode === 27) {
                    CoverPop.close();
                }
            }
        },

        openCallback = function() {

            // if not the default setting
            if (settings.onPopUpOpen !== null) {

                // make sure the callback is a function
                if (util.isFunction(settings.onPopUpOpen)) {
                    settings.onPopUpOpen.call();
                } else {
                    throw new TypeError('CoverPop open callback must be a function.');
                }
            }
        },

        closeCallback = function() {

            // if not the default setting
            if (settings.onPopUpClose !== null) {

                // make sure the callback is a function
                if (util.isFunction(settings.onPopUpClose)) {
                    settings.onPopUpClose.call();
                } else {
                    throw new TypeError('CoverPop close callback must be a function.');
                }
            }
        };



    /**
     * Public methods
     */

    CoverPop.open = function() {

        var i, len;

        if (util.hashExists(settings.delayHash)) {
            util.setCookie(settings.cookieName, 1); // expire after 1 day
            return;
        }

        util.addClass($el.html, 'CoverPop-open');

        // bind close events and prevent default event
        if ($el.closeClassNoDefaultEls.length > 0) {
            for (i=0, len = $el.closeClassNoDefaultEls.length; i < len; i++) {
                util.addListener($el.closeClassNoDefaultEls[i], 'click', function(e) {
                    if (e.target === this) {
                        util.preventDefault(e);
                        CoverPop.close();
                    }
                });
            }
        }

        // bind close events and continue with default event
        if ($el.closeClassDefaultEls.length > 0) {
            for (i=0, len = $el.closeClassDefaultEls.length; i < len; i++) {
                util.addListener($el.closeClassDefaultEls[i], 'click', function(e) {
                    if (e.target === this) {
                        CoverPop.close();
                    }
                });
            }
        }

        // bind escape detection to document
        util.addListener(document, 'keyup', onDocUp);
        openCallback();
    };

    CoverPop.close = function(e) {
        util.removeClass($el.html, 'CoverPop-open');
        util.setCookie(settings.cookieName, settings.expires);

        // unbind escape detection to document
        util.removeListener(document, 'keyup', onDocUp);
        closeCallback();
    };

    CoverPop.init = function(options) {
        if (navigator.cookieEnabled) {
            util.mergeObj(settings, options);

            // check if there is a cookie or hash before proceeding
            if (!util.hasCookie(settings.cookieName) || util.hashExists(settings.forceHash)) {
                if (settings.delay === 0) {
                    CoverPop.open();
                } else {
                    // delay showing the popup
                    setTimeout(CoverPop.open, settings.delay);
                }

            }
        }
    };

    // alias
    CoverPop.start = function(options) {
        CoverPop.init(options);
    };


}(window.CoverPop = window.CoverPop || {}));
También hay otra línea de código (que remarco en rojo) que según creo le da una vida de 30 días y no se si debería cambiarlo desde aquí:
Código:
 // duration (in days) before it pops up again
            expires: 30,
pero en realidad ya no se cómo interpretar la segunda línea
Código:
 date.setTime(+ date + (days * 86400000));
y la verdad es que no quisiera estropear el código por tocar algo indebido.

Si se puede cambiar desde el primer códgio sin alterar el segundo sería estupendo, pero no estoy seguro de que sea así ¿alguna sugerencia?...
  #4 (permalink)  
Antiguo 14/12/2014, 08:07
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Respuesta: Cómo programar la duracion de las Cookies

La segunda línea es igual a la de w3schools. Es decir, ambas funciones son equivalentes.
  #5 (permalink)  
Antiguo 14/12/2014, 12:20
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Cómo programar la duracion de las Cookies

veamos, entonces si sustituyo la function original

Código Javascript:
Ver original
  1. setCookie: function(name, days) {
  2.                 var date = new Date();
  3.                 date.setTime(+ date + (days * 86400000));
  4.                 document.cookie = name + '=true; expires=' + date.toGMTString() + '; path=/';
  5.             },
por la function de W3Schools

Código Javascript:
Ver original
  1. function setCookie(cname, cvalue, exdays) {
  2.         var d = new Date();
  3.         d.setTime(d.getTime() + (exdays*24*60*60*1000));
  4.         var expires = "expires="+d.toUTCString();
  5.         document.cookie = cname + "=" + cvalue + "; " + expires;
  6.     }
¿va a funcionar correctamente y durará los 10 días?

Perdona mi ignorancia pero con esto estoy totalmente perdido y me cuesta mucho comprender cómo funciona.

Gracias
  #6 (permalink)  
Antiguo 14/12/2014, 13:13
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Cómo programar la duracion de las Cookies

En el link que te pasó Alexis88 viene la explicación completa...
  #7 (permalink)  
Antiguo 14/12/2014, 13:29
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Cómo programar la duracion de las Cookies

Vale gracias, lo trataré de entender ya que viene todo en inglés y luego comento.

Saludos

Etiquetas: js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:04.