Avatar billede DPH Trading Praktikant
05. oktober 2016 - 13:13 Der er 7 kommentarer

Browseren beholder flere værdier for det samme unikke cookie name-value par

Vi har en webshop. Vi bruger en cookie som indeholder en ordre ID for hver ordre / bruger. Alle varer i kurven og alle kundeoplysninger er relateret till denne ID. Denne cookie skal kun ændres når ordren er gennemført eller værdien er tomt. Vi tjekker cookien ved serveren med hver page load og det bliver ændret kun i overstående omstandigheder.

Nogle måneder siden vi har oplevet at under nogle omstændigheder, browseren kan beholde flere versioner af det samme cookie værdi, og 'skifte' mellem disse værdier tilfældig ved page load. Værdien bliver ikke overskrevet - hvis browseren skifter fra værdi A till værdi B, det kan skifte tilbage til A efter nogle refreshes / navigationer til andre sider. Browseren kan beholde op til 5 (måske flere) værdier for en enkelt unikke cookie, og det skifter dem tilfældigt når brugeren navigerer rundt i vores webshop. Det er meget problematisk, fordi lige så snart som cookie værdien bliver skiftet - indholdet af kurven skifter også. Vi har oplevet problemet med Internet Explorer 11 og Google Chrome 53. Hvis vi prøver at tjekke cookie værdien i browser konsolen , det viser kun værdien som bliver brugt i den nuværende sidevisning.

Vi bruger følgende funktion i javascript til at sætte vores cookie:

function SetCookie(c_name, value, exdays){
  var expires = "";
  if(exdays)
  {
    var date = new Date();
    date.setTime(date.getTime() + (exdays*24*60*60*1000));
    expires = "; expires=" + date.toUTCString();
  }
  document.cookie = c_name + "=" + escape(value) + expires + "; path=/";
}


Uanset hvor jeg læser om cookies - de siger at hvis man overskriver cookie værdien på det samme domæne og sti, så skal det gamle værdi blive ødelagt. Så har jeg prøvet følgende hver gang jeg sætter vores ordre ID cookie værdi (slet værdien før vi sætter det):


SetCookie(name , "", -1);
SetCookie(name , val, 14);


Desværre, det løser ikke vores problem, og browseren stadigvæk skifter cookie verdien tilfældig ved page load. Hvad kunne være årsagen til sådan adfærd? Er der nogen måde at tjekke hvilke (skygge) værdier af en cookie browseren har gemt men bruger ikke i nuværende side visning? Er der nogen måde at tjekke hvor mange værdier for en bestemt cookie navn og sti browseren har gemt?
Avatar billede keysersoze Guru
05. oktober 2016 - 13:37 #1
Du kan altid se hvilke cookies og lignende, der tilhører siden ved at gå ind i din developer toolbar (F12) i browseren. Det eneste jeg lige kan komme på kunne forårsage nogle udfordringer var skiftende subdomain (www, ikke-www) eller http/https.
Avatar billede DPH Trading Praktikant
06. oktober 2016 - 08:31 #2
Man kan se alle cookies via Developer tools (F12) i Chrome. Det er lidt sværre på IE, men også muligt. Så tjekker jeg cookie værdien for cookie 'ordreID' og jeg kan se værdi 'A'. Brugeren navigerer til kurven, browseren skifter værdien af cookien 'ordreID' til 'B', og det vises tydeligt i Developer Tools eller konsolen ved at skrive console.log(document.cookie); Et par reloads / navigering senere og værdien af cookie 'ordreID' bliver skiftet til '?' igen. Vi har oplevet op til 5 værdier i det samme session (det kan være flere). Man kan ikke se de andre værdier som bliver ikke brugt i nuværende sidevisning.

Vi har en redirect regel for vores domæne, så det altid bliver vist som www.navn.com. Vi har ikke nogen subdomæne. Man kan se i chrome at domæn navnet for alle cookies er altid www.navn.com.
Stien er altid det samme i vores cookie setter funktion ;path=/.
Det kan også ikke være SSL. Det er rigtigt at vi bruger det på vores side, men jeg har det slet ikke konfigureret i min testmiljø og jeg kan også opleve fejlen med kun http (port 80).
Avatar billede DPH Trading Praktikant
06. oktober 2016 - 08:33 #3
"bliver skiftet til '?' igen"

skal blive

"bliver skiftet til 'A' igen"

Jeg kan ikke redigere min post...
Avatar billede keysersoze Guru
06. oktober 2016 - 09:40 #4
Der er ikke lige noget oplagt, der falder mig ind - mit umiddelbart bedst bud til lidt ekstra fejlsøgning; 1) sæt en alert på hvor din cookie sættes så du er 100% sikker på hvornår den skifter på klienten 2) kig i developer toolbarens network-tab og se hvilke cookies, der sendes og modtages.
Avatar billede DPH Trading Praktikant
06. oktober 2016 - 11:49 #5
1) Det har jeg prøvet - funktionen SetCookie(name, val, duration) bliver kun kaldt hvis serveren svarer at cookie værdien er ikke gyldigt (ordren allerede gennemført).
Det bliver ikke kaldt når cookie værdien bliver "skiftet" i browseren så min alert aldrig dukker op.
2) Det har jeg også prøvet - man kan godt se indholdet af cookie listen i en http request. Response headeren indeholder de samme cookies fordi vi kun ændrer cookies via javascript. Kunden navigerer til en anden side (ny request bliver startet) og værdien for en af vores cookies er forskællig i det ny request, uden at kalde SetCookie() funktionen. Vi har ikke nogle andre funktioner som styrer cookies. Det er måske en problem med caching, men det opstår også når jeg sætter no-cache headers på alle requests i IIS7.
Avatar billede keysersoze Guru
07. oktober 2016 - 14:59 #6
Har du kun oplevet det lokalt på én maskine eller har du testet andre steder uden for dit lokale netværk og andre maskiner - tænker det ikke er et kode-/klient-problem men caching længere ude i kæden? Ikke så sandsynligt igen men jeg sidder ikke tilbage med nogle oplagte muligheder desværre.

Hvis muligt så kom evt med et link så det kan testes direkte.
Avatar billede DPH Trading Praktikant
11. oktober 2016 - 13:42 #7
Det kan du selv prøve på vores hjemmeside www.dphtrading.dk
Brug Internet Explorer eller Google Chrome
Sæt nogle ting i kurven og prøv at navigere rund på siden.
På et tidspunkt så er varene væk - de er relateret til cookien som hedder "dph.webshop.cookie"

Det kunne også være at vi her i kontoret tester med mange ordre, og man kan kun opleve fejlen hvis man har gennemført en ordre før og cookie-?n bliver ikke reset rigtigt eller det bliver cacheret efter det.

Men det forklarer ikke hvorfor browseren kan bestemme til at skifte til en cookie som var brugt før.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester