JS - dlaczego cookies znika?
Marek - 16-05-2010 18:15
JS - dlaczego cookies znika?
Witam,
Flash posiada włącznik muzyki. Chciałem aby jego stan był zapamiętany w
cookies po to aby przy kolejnych wejściach powracał stan zapamiętany.
Tymczasem okazuje się, że cookies jest pamiętane ... ale do czasu
zamknięcia przeglądarki. Być może to ważne: strona jest w PHP.
Kliknięcie na przycisku on/off we Flashu wywołuje funkcję JS jak niżej:
function setMusicState(state)
{
writeCookie("music",state ? 1 : 0,365);
document.location.reload();
}
Gdy Flash załaduje się (następuje to po załadowaniu całości dokumentu),
sprawdza czy może odtwarzać muzykę.
function getMusicState()
{
var cookies=readCookies();
if (!cookies) return true;
if (typeof(cookies["music"])=="undefined") return true;
return cookies["music"]==1;
}
Funkcje zapisu i odczytu cookies wyglądają następująco:
function readCookies()
{
var i,arr,tmp,ret=new Object;
arr=document.cookie.split("; ");
if (arr.length==0) return null;
for (i=0;i<arr.length;i++)
{
tmp=arr[i].split("=");
if (tmp.length!=2) continue;
ret[tmp[0]]=unescape(tmp[1]);
}
return ret;
}
function writeCookie(name,value,expiryDays)
{
var tmp, expires=new Date();
tmp=expires.getTime()+expiryDays*24*60*60*1000;
expires.setTime(tmp);
document.cookie=name+"="+escape(value)+";
expiries="+expires.toGMTString();
}
Po zamknięciu browsera i otwarciu go na stronie WWW, cookies zawiera
wyłącznie ID sesji PHP. Nie ma w cookies śladu po zmiennej "music" mimo, że
czas wygaśnięcia był ustawiony na rok. Czy wie ktoś z Was w czym rzecz?
Peter May - 16-05-2010 18:15
W dniu 2010-05-08 00:29, Marek pisze:
[...]
> Po zamknięciu browsera i otwarciu go na stronie WWW, cookies zawiera
> wyłącznie ID sesji PHP. Nie ma w cookies śladu po zmiennej "music" mimo, że
> czas wygaśnięcia był ustawiony na rok. Czy wie ktoś z Was w czym rzecz?
Jesteś pewien, że cookies dobrze ustawiasz? Nie chce mi się analizować
funkcji ustawiających cookie, ale może spróbuj tego:
var Cookie = {
set : function(name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
} else {
expires = "";
}
document.cookie = name + "=" + value + expires + "; path=/";
},
get : function(name) {
name += "=";
var s = document.cookie.split("; ");
for ( var i = 0; i < s.length; i++) {
var c = s[i];
if (c.indexOf(name) === 0) {
return unescape(c.substring(name.length, c.length));
}
}
return null;
},
erase : function(name) {
this.set(name, "", -1);
},
enabled : function() {
this.set("cookietest", "cookietest");
return this.get("cookietest") !== null;
}
};
Przykład:
Cookie.set("nazwa","wartosc", 365);
--
Peter
olo - 16-05-2010 18:15
W dniu 08.05.2010 00:29, Marek pisze:
> Witam,
>
> Flash posiada włącznik muzyki.
flash posiada także swoje własne "cookie", ktore zwa sie sharedObject
czy cos w tym stylu. Uzycie szybkie, proste i wygodne
--
pozdrawiam!
http://webtrunki.pl - piwa, wina, wódki, domowe wyroby
http://en.webtrunki.pl - beers, wines, vodkas, your own products
Marek - 16-05-2010 18:15
Dnia Sat, 08 May 2010 09:37:01 +0200, Peter May napisał(a):
> W dniu 2010-05-08 00:29, Marek pisze:
>
> Jesteś pewien, że cookies dobrze ustawiasz? Nie chce mi się analizować
> funkcji ustawiających cookie, ale może spróbuj tego:
>
Cookie jakoś dizała - tylko wygasa tak jakby czas ważności nie był
ustawiany (sprawdzałem to 10x - i jest). Czyli cookie znika po zamknięciu
browsera.
Przeanalizowałem kod jaki proponujesz i jest bliźniaczo podobny do mojego:
różni się tylko dodawaniem path do cookie. Dodałem i też nic :-(
Przypuszczam, że ma z tym związek PHP. Wróżę trochę teraz...
Marek - 16-05-2010 18:15
Dnia Sat, 08 May 2010 09:56:49 +0200, olo napisał(a):
> W dniu 08.05.2010 00:29, Marek pisze:
>> Witam,
>>
>> Flash posiada włącznik muzyki.
>
> flash posiada także swoje własne "cookie", ktore zwa sie sharedObject
> czy cos w tym stylu. Uzycie szybkie, proste i wygodne
Tak, wiem. Standardowo ustawione do 100kB. W tym konkretnym rozwiązaniu
mógłbym to ostatecznie zastosować. Generalnie jednak wolałbym użytkownikom
pozwolić na pełną kontrolę nad aplikacją. Każdy może usunąć cookies
natomiast z tego bufora to nie takie proste - no i trzeba wiedzieć, że coś
takiego w ogóle istnieje.
Peter May - 16-05-2010 18:15
W dniu 2010-05-08 10:51, Marek pisze:
> Dnia Sat, 08 May 2010 09:37:01 +0200, Peter May napisał(a):
>
>> W dniu 2010-05-08 00:29, Marek pisze:
>>
>> Jesteś pewien, że cookies dobrze ustawiasz? Nie chce mi się analizować
>> funkcji ustawiających cookie, ale może spróbuj tego:
>>
>
> Cookie jakoś dizała - tylko wygasa tak jakby czas ważności nie był
> ustawiany (sprawdzałem to 10x - i jest). Czyli cookie znika po zamknięciu
> browsera.
A sprawdź jeszcze zachowanie na innym komputerze. Chodzi o to, aby
wyeliminować podejrzenia co do ustawień bezpieczeństwa na danym komputerze.
--
Peter
Borys =?iso-8859-2?Q?Pogore=B3o?= - 16-05-2010 18:15
Dnia Sat, 8 May 2010 10:51:34 +0200, Marek napisał(a):
> Cookie jakoś dizała - tylko wygasa tak jakby czas ważności nie był
> ustawiany (sprawdzałem to 10x - i jest). Czyli cookie znika po zamknięciu
> browsera.
Testowane webdeveloperem? Zajrzyj do plików cookies danej przeglądarki,
przekonasz sie co tam naprawdę ląduje.
--
Borys Pogoreło
borys(#)leszno,edu,pl
Gabriel - 16-05-2010 18:15
Użytkownik "Marek" <brak@email.com> napisał w wiadomości
news:1tp3k8g69x2hf.1vut1wbb8g5t9.dlg@40tude.net...
> Tak, wiem. Standardowo ustawione do 100kB. W tym konkretnym rozwiązaniu
> mógłbym to ostatecznie zastosować. Generalnie jednak wolałbym użytkownikom
> pozwolić na pełną kontrolę nad aplikacją. Każdy może usunąć cookies
> natomiast z tego bufora to nie takie proste - no i trzeba wiedzieć, że coś
> takiego w ogóle istnieje.
Ja moze tak z innej beczki i troche OT.
A nie mozesz dac standardowo muzyke OFF?
Bo przyznam szczerze, ze cokolwiek, co ma defaultowo wlaczona muzyke
powoduje u mnie alt+f4. Chodzi oczywiscie o strony.
--
Pozdrawiam
Gabriel Zastawnik
http://www.monitoringkomputera.pl - Monitoring Komputera
Marek - 16-05-2010 18:15
Dnia Sat, 8 May 2010 23:38:59 +0200, Gabriel napisał(a):
> Ja moze tak z innej beczki i troche OT.
> A nie mozesz dac standardowo muzyke OFF?
> Bo przyznam szczerze, ze cokolwiek, co ma defaultowo wlaczona muzyke
> powoduje u mnie alt+f4. Chodzi oczywiscie o strony.
U mnie też podobne wrażenia to wywołuje - lecz nie mogę...
Marek - 16-05-2010 18:15
Dnia Sat, 8 May 2010 17:22:52 +0200, Borys Pogoreło napisał(a):
> Testowane webdeveloperem? Zajrzyj do plików cookies danej przeglądarki,
> przekonasz sie co tam naprawdę ląduje.
Cenna sugestia. Wygląda na to, że ten cookie z jednej strony wcale się nie
zapisuje mimo że chodząc po poszczególnych stronach serwisu - jest
odczytywany prawidłowo. Wygląda to tak jakby cookie został ukryty: nie
widać go lecz można odczytać go lecz tylko w obrębie sesji przeglądania. Po
jej zerwaniu cookie przestaje być odczytywany. O co moze chodzić?
gefek - 16-05-2010 18:15
In news:news:1u9e6txvdvpzj.ncjf4st5wt1t$.dlg@40tude.n et, Marek wrote:
> Dnia Sat, 8 May 2010 23:38:59 +0200, Gabriel napisał(a):
>> Ja moze tak z innej beczki i troche OT.
>> A nie mozesz dac standardowo muzyke OFF?
>> Bo przyznam szczerze, ze cokolwiek, co ma defaultowo wlaczona muzyke
>> powoduje u mnie alt+f4. Chodzi oczywiscie o strony.
> U mnie też podobne wrażenia to wywołuje - lecz nie mogę...
Jeszcze tego by brakowało. u mnie takie strony zasługują najwyżej na ctrl+w
--
Grzesiek
Borys =?iso-8859-2?Q?Pogore=B3o?= - 16-05-2010 18:15
Dnia Mon, 10 May 2010 13:16:09 +0200, Marek napisał(a):
> odczytywany prawidłowo. Wygląda to tak jakby cookie został ukryty: nie
> widać go lecz można odczytać go lecz tylko w obrębie sesji przeglądania. Po
> jej zerwaniu cookie przestaje być odczytywany. O co moze chodzić?
Masz źle ustawiony czas wygaśnięcia, ciasteczko jest pamiętane tylko na
okres sesji. To teraz popatrz jeszcze raz na poniższy kod... :)
document.cookie=name+"="+escape(value)+";expiries= "+expires.toGMTString();
^^^^^^^^
--
Borys Pogoreło
borys(#)leszno,edu,pl
Marek - 16-05-2010 18:15
Dnia Tue, 11 May 2010 01:04:59 +0200, Borys Pogoreło napisał(a):
> >
> document.cookie=name+"="+escape(value)+";expiries= "+expires.toGMTString();
> ^^^^^^^^
Nie wierzę :-)))))))))))))))))))))))
Dzięki za spostrzegawczość :-D