2016-03-20 10 views
1

Firefox ve Safari'de test etme, aşağıdaki satırların ikisini de denedim. Her biri kurabiyeyi ayarlar, ancak her iki yaklaşım da tarayıcıyı kapattıktan sonra (daha sonra yeniden açtım) tanımlama bilgisini sona erdirir. Tarayıcının çerez bilgisi "testin" süresinin sona ereceği "oturumun sonunda" yazıyor, ancak bu gerçekleşmiyor.Çerezler, tarayıcı kapanıyorsa sona erecek şekilde js ile ayarlandı

Bu konuda bazı benzer yazılar var (örneğin, When does a cookie with expiration time 'At end of session' expire?), ancak hiçbir şey yardımcı olmamıştır, ya da özel olarak javascript aracılığıyla tanımlama bilgisini ayarlama konusunda hiçbir şey yardımcı olmamıştır.

// tarayıcı kapanış sonra sona başarısız

document.cookie'yi = "test = 1; yol = /; = 0 sona eriyor"; "; Path =/test = 1"

//

document.cookie'yi = tarayıcı kapanış sonra sona başarısız;

+0

Bu ilginç. Belki de bu, bazı içerik güvenliği ayarlarından kaynaklanmaktadır, örneğin, çerez başlangıçta sunucu yanıt başlığında ayarlanmıştır ve 'httpOnly' bayrağı ayarlanmıştır. Sunucunuz set-cookie başlıklarını gönderiyor mu? – lxe

+0

@lxe Aslında oldukça aptal olduğu ortaya çıktı. Bir macdaki tarayıcıyı kapattığınız zaman hala canlı tutulan bir tarayıcı sürecinin olduğunu fark etmemiştim. Tarayıcıdan açıkça çıkmak zorundasınız. Bunu yaptıktan sonra, çerez gitmişti. –

cevap

0

Son kullanma etiketi bir UTC-Datestring almak istiyor. Sadece yazdığım bazı basit işlevleri kullanabilirsiniz: mevcut sayfa kaldığında

setCookie = function(attrib, value, exp_days) { 
    var dt = new Date(); 
    dt.setTime(dt.getTime() + (exp_days*86400000)); // Convert days to ms 
    document.cookie = attrib + "=" + value + "; expires=" + dt.toUTCString(); // add attrib=value to the cookie and set an expiration date 
} 

getCookie = function(attrib){ 
    var split_cookie = document.cookie.split("; "); 
    attrib+="="; 
    for(var i=0; i<split_cookie.length; i++) 
    if(~split_cookie[i].indexOf(attrib)) // if the attribute is somewhere in the cookie string 
    // im using an ugly bitflip operator here, it could as well be an if(...!=-1) 
     return split_cookie[i].substring(attrib.length + split_cookie[i].indexOf(attrib),split_cookie[i].length); 
    return ""; 
} 

removeCookie = function(attrib){ 
    setCookie(attrib, "", -1); 
} 

Eğer removeCookie() fonksiyonunu kullanırsanız

, attrib değeri silinecektir.

+0

Teşekkürler. Ne yazık ki aynı sonuç. Tarayıcı kapandığında süresinin dolmasını istiyorsanız, exp_days tam olarak ne ayarlanmalıdır? 0, 1, -1 denedim ve boş bırakıyorum. RemoveCookie işlevi için, herhangi bir şeyi açıkça kaldırmak istemiyorum. Tarayıcı otomatik olarak kapanmamayı otomatik olarak "kaldırmayı" benimzemiş mi? Bir şey - şimdi tarayıcıları kapattıktan sonra bile hala bir işlemin devam ettiğini görüyorum. Bu işlemi yalnızca bir kez öldürdüğümde, çerezlerin sonunda süresinin dolduğunu öğrenir miyim? Yani soru şu: Oturum/sürecin devam etmesine neden olan bir tarayıcı ayarı var mı? –

+0

Güncelleme: Açık süreçler, Mac’te olduğum için açıktı çünkü tarayıcıyı kapattıktan sonra açık kalıyor. Dolayısıyla, tekrar kalan tek sorumuz, tarayıcı kapatıldığında zaman aşımına uğramasını istiyorsam exp_days'in tam olarak ayarlanması gereken nedir? 31572500 gibi bir numara görüyorum, ama neden? 1'inin yarın sona ermesi anlamına gelirse, 31572500 gününün 31572500'ünü geçmemesi gerekir, oturumun sonunda değil. –

+0

Cookie değeri yanlış olduğunda ("") veya son kullanma değerine ulaşıldığında kaldırılır. removeCookie her ikisini de yapar, bu yüzden sayfa yeniden yüklendiğinde çerez silinir (-1 dün demektir, bu yüzden geçirilir. 31572500 neden çalıştığından emin değilim, eğer bir taşma değilse muhtemelen sadece bir geçersiz sonuçlanır tarihi). – Chemistree

0

Tarayıcıda bir macu kapattığınız zaman, hala bir tarayıcı işleminin canlı tutulduğunu farketmedim. Tarayıcıdan açıkça çıkmak zorundasınız. Bunu yaptıktan sonra, çerez gitmişti.

İlgili konular