[php] controleren of bezoeker cookies accepteert *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Momenteel ben ik bezig met een vacaturepagina, het zou mooi zijn dat de bezoekers net als op bv. Marktplaats.nl kunnen zien hoevaak een pagina bekenen is.

Ik dacht, da's snel en simpel opgelost met een cookie. Dit werkt prima, alleen als iemand zijn browser geen cookies accepteert, dan blijft hij maar doortellen als de bezoeker de pagina gaat vernieuwen.

Geen probleem, dan tellen we die bezoekers gewoon niet. Op jaarbasis accepteert slechts 0,1% van de bezoekers geen cookies. Probleem opgelost zou je denken, niets is minder waar.

Ook heb ik gedacht om alle ip adressen in een database op te slaan, alleen als dan iemand van bv. een gemeentehuis de vacature bekijkt, worden zijn collega's ook niet getelt omdat die van hetzelfde ip afkomen.

Natuurlijk heb ik al even gezocht, maar niet echt een oplossing gevonden voor het cookie probleem. Als ik goed heb begrepen moet er eerst een output komen, dan wordt het cookie 'geset', hierna kan ik dus controleren als de bezoeker wel of geen cookies accepteert.

Maar dat zou toch absurd zijn, hebben ze hier in php 5 geen oplossing voor gemaakt? Wie kan mij hier uitleg over geven en/of verder mee helpen.

Deze code wordt momenteel gebruikt om het cookie te setten en te controleren.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    if (empty($_COOKIE["jobs".$row['id']])) {
        
        mysql_query("UPDATE jobs SET visits=(visits+1) WHERE id = ".$row['id']);
        $row['visits']++;
        
        // cookie verloopt met een uur
        setcookie("jobs".$row['id'], 1, time()+3600, "/");
        
        echo "cookie aanmaken en teller+1";
    }
    else {
        echo "niet tellen";
    }

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Je kan beter een session hiervoor gebruiken hoor. Als iemand 100 vacatures bij jou bekijkt, heeft ie ineens 100+ cookies in zn browser staan.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Wat is je probleem exact? Werkt deze code niet?

Dat php5 geen standaard oplossing voor jouw probleem heeft is niet absurd. Het controleren of een cookie aanwezig is kan pas als de browser zijn tweede request stuurt en heeft niets met php te maken.
- Browser stuurt request - zonder cookie
- Browser ontvang reply - met een cookie om te bewaren
- Browser stuurt een ander request - nu met een cookie (als de browser cookies meestuurt)
Indien je geen truuks toepast kun je dus pas de tweede hit een cookie aanmaken.

petersmit.eu


Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
MueR schreef op dinsdag 13 januari 2009 @ 15:06:
Je kan beter een session hiervoor gebruiken hoor. Als iemand 100 vacatures bij jou bekijkt, heeft ie ineens 100+ cookies in zn browser staan.
Een sessie werkt ook niet, als je browser geen cookies accepteerd.
Pete schreef op dinsdag 13 januari 2009 @ 15:08:
Wat is je probleem exact? Werkt deze code niet?

Dat php5 geen standaard oplossing voor jouw probleem heeft is niet absurd. Het controleren of een cookie aanwezig is kan pas als de browser zijn tweede request stuurt en heeft niets met php te maken.
- Browser stuurt request - zonder cookie
- Browser ontvang reply - met een cookie om te bewaren
- Browser stuurt een ander request - nu met een cookie (als de browser cookies meestuurt)
Indien je geen truuks toepast kun je dus pas de tweede hit een cookie aanmaken.
Dus dan MOET ik een doorstuurpagina maken? Dat betekend wel weer een extra select query...

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Nee, je moet niet op relatief onzinnige dingen focussen en daar een stampij van jewelste over maken als een fractie van je bezoekers een dusdanig dichtgetimmerde browser heeft dat jij niks aan cookies mag doen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • remmelt
  • Registratie: Januari 2001
  • Laatst online: 09-04 12:25
Martine schreef op dinsdag 13 januari 2009 @ 15:12:
[...]
Een sessie werkt ook niet, als je browser geen cookies accepteerd.
Wel waar. Dan krijg je namelijk standaard een PHP_SESS_ID als laatste redmiddel in je get mee.

Sessions werken altijd.

Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
zorg er in elk geval voor dat de op de client pc geen tientallen cookies verschijnen van verschillende vacatures (het maximaal aantal toegelaten cookies is gelimitteerd!). En uiteindelijk speelt het toch geen rol dat die teller 2 keer toont als ik refresh? Of is een uniek aantal views hier echt zo heilig?

[ Voor 10% gewijzigd door webinn op 13-01-2009 15:23 ]


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Martine schreef op dinsdag 13 januari 2009 @ 15:12:
Een sessie werkt ook niet, als je browser geen cookies accepteerd.
Onzin. Het hele punt is dat je dan maar 1 cookie hebt ipv tientallen of zelfs honderden. Houd in je achterhoofd dat veel browsers ivm securityredenen een limiet hanteren qua cookiecount. Vaak is deze niet veel hoger dan iets van 15 stuks per domein.

Dit gezegd hebbende, de hele oplossing is een beetje raar. Waarom zou je per user in een cookie willen bijhouden hoeveel keer een pagina is bezocht? Waarom maak je serverside niet gewoon een tellertje per pagina aan in de database? Op deze manier blijft de informatie voor altijd behouden en is het ook overal gelijk, ongeacht de manipulatie door de client en/of een crash/restart van de webserver.

[ Voor 4% gewijzigd door BalusC op 13-01-2009 15:35 ]


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54

r0b

Martine schreef op dinsdag 13 januari 2009 @ 14:57:
Geen probleem, dan tellen we die bezoekers gewoon niet. Op jaarbasis accepteert slechts 0,1% van de bezoekers geen cookies. Probleem opgelost zou je denken, niets is minder waar.
......
Ook heb ik gedacht om alle ip adressen in een database op te slaan, alleen als dan iemand van bv. een gemeentehuis de vacature bekijkt, worden zijn collega's ook niet getelt omdat die van hetzelfde ip afkomen.
Schiet mij maar lek hoor, maar kan je e.e.a niet combineren?
Stap 1: Koekje aanbieden
Stap 2: Resultaat controleren
Stap 3: Als koekjes niet werken, IP-based oplossing aanbieden?

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
webinn schreef op dinsdag 13 januari 2009 @ 15:23:
... En uiteindelijk speelt het toch geen rol dat die teller 2 keer toont als ik refresh? Of is een uniek aantal views hier echt zo heilig?
Het zou een beetje lullig zijn als er een clown langs komt en het aantal visits even gaat opkrikken.
BalusC schreef op dinsdag 13 januari 2009 @ 15:31:
[...]
Onzin. Het hele punt is dat je dan maar 1 cookie hebt ipv tientallen of zelfs honderden. Houd in je achterhoofd dat veel browsers ivm securityredenen een limiet hanteren qua cookiecount. Vaak is deze niet veel hoger dan iets van 15 stuks per domein.

Dit gezegd hebbende, de hele oplossing is een beetje raar. Waarom zou je per user in een cookie willen bijhouden hoeveel keer een pagina is bezocht? Waarom maak je serverside niet gewoon een tellertje aan in de DB? Op deze manier blijft de informatie voor altijd behouden, ongeacht of de manipulatie door de client en/of de webserver crasht/herstart.
Ja, goed idee, maar hoe vis ik dan de unieke bezoekers daaruit? Zoals ik al in de topicstart aangaf, als iemand van een gemeentehuis komt oid. Dan wordt die maar een keer geteld, komt zijn collega ook. Dan is dat wel een visit, maar wordt niet geteld omdat dit ip al in de database staat.
r0b schreef op dinsdag 13 januari 2009 @ 15:32:
[...]

Schiet mij maar lek hoor, maar kan je e.e.a niet combineren?
Stap 1: Koekje aanbieden
Stap 2: Resultaat controleren
Stap 3: Als koekjes niet werken, IP-based oplossing aanbieden?
Maar dan moet ik ieder keer een refresh doen, dat is toch onlogisch?

[ Voor 12% gewijzigd door Martine op 13-01-2009 15:38 . Reden: reply op Rob gegeven ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Dat moet je dus gewoon via de session doen. Je moet je duidelijk even inlezen in session handling in PHP, want je uitspraken kloppen van geen kant. Meer over sessions kan je vinden in de php manual.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Martine schreef op dinsdag 13 januari 2009 @ 15:36:
Ja, goed idee, maar hoe vis ik dan de unieke bezoekers daaruit?
Je wilt unieke bezoekers ipv pageviews tellen? Tel dan gewoon de sessies.

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Nee, ik wil een keer een unieke pageview tellen in een tijdsbestek van een uur per bezoeker.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Dus je maakt een sessie aan met een timeout van 60 minuten waarin je de pageviews bijhoudt. Als de betreffende pagina niet in die array met pageviews voorkomt, moet je hem updaten. Lijkt me toch niet moeilijk?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
En als de bezoeker dan de browser sluit en wederom de pagina bekijkt? Wordt de pageview dan nogmaals geteld?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Zucht. Ja. Er is alleen niks anders te doen. Op IP is brak ivm proxies, cookies kunnen ook worden gecleared en sessions dmv browser sluiten herstart. Je geeft in je TS aan dat het "wel leuk zou zijn". Waarom zit je jezelf er zo ontiegelijk druk over te maken dat iemand misschien wel zn browser af kan sluiten en een dubbele view laat tellen? Het is voor zover ik van jou heb gehoord niet vitaal, zelfs niet eens belangrijk. Denk je niet dat je een beetje aan het overdrijven bent qua mogelijk misbruik? Defensief programmeren is prima, maar wat jij wil gaan doen is onzinnig, overbodig en overcomplex voor fluff.

[ Voor 5% gewijzigd door MueR op 13-01-2009 15:57 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Mooi gezegt, ik ben wat dat betreft wel een beetje te gek aan het werk geslagen. Maar goed, ik heb nu een sessie met een verlooptijd van 60 minuten aangemaakt, en check dat ding gewoon uit. Bestaat $_SESSION['jobs']['visits'][$riw['id']] niet, dan wordt hij aangemaakt en wordt er een pageview bij getelt, bestaat deze wel, dan gebeurd er niets.

MAAR! Wat nu het geval, als ik de cookies uit schakel, wordt de pageview bij iedere update opnieuw meegenomen. 8)7

Hoe houdt Marktplaats zijn visits van een advertentie bij?

[ Voor 6% gewijzigd door Martine op 13-01-2009 16:04 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Zoals ook te zien is op de PHP manual, en hier in het topic eerder is aangehaald, maakt het uitschakelen van cookies weinig uit voor je sessie. Maar nogmaals de vraag: waarom maak jij je hier zo druk om. Het is fluff, nutteloos, eye-candy. Hou op je druk te maken over trivialiteiten en mogelijk een tien views per vacature meer op maandbasis doordat iemand een keer heel misschien cookies uit heeft staan.

Marktplaats gebruikt daar een vorm van caching voor, maar dat is totaal niet interessant voor je, tenzij je een paar duizend pageviews per minuut gaat genereren.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Martine schreef op dinsdag 13 januari 2009 @ 16:02:
Hoe houdt Marktplaats zijn visits van een advertentie bij?
Ook onbetrouwbaar. Ik heb een willekeurige marktplaats advertentie genomen en deze bekeken met firefox + internet explorer + chrome, maar aantal keer bekeken blijft op 0 staan.

enne, als je het vraagt:

Google analytics gebruikt een stukje javascript daarvoor.

vroegah keken we naar pageviews met een server log analyzer....

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Observer
  • Registratie: April 2001
  • Laatst online: 16:24
leuk_he schreef op dinsdag 13 januari 2009 @ 16:21:
[...]


Ook onbetrouwbaar. Ik heb een willekeurige marktplaats advertentie genomen en deze bekeken met firefox + internet explorer + chrome, maar aantal keer bekeken blijft op 0 staan.

enne, als je het vraagt:

Google analytics gebruikt een stukje javascript daarvoor.

vroegah keken we naar pageviews met een server log analyzer....
Marktplaats werkt de tellers periodiek bij, anders zou de database het niet overleven. Die verzamelen het dus eerst in een tijdelijk log oid en elke X minuten wordt dat log uitgelezen door een scriptje.

There are 10 kinds of people in the world: those that understand binary and those that don't


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Klopt. Het is gewoon stomme statistiek welke voor reguliere gebruikers enkel leuk is als ze statsgeil zijn, maar waarvan elke site uiteindelijk qua performance gaat balen en het vervolgens dusdanig gaat cachen dat je er helemaal niets meer aan hebt. :z

Jep, bovenstaande is meer een rant, maar in 90% van de gevallen (hier heb je nog een nutteloze statistiek :> ) wel de waarheid.

{signature}


Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Toch wel vreemd, er zijn hier meerdere mensen die beweren dat als de browser geen cookies accepteert, dat een sessie gewoon werkt.

Dan zou je dus zeggen, als het onderstaande scriptje gewoon zou werken. Roep deze pagina eens aan, refresh een keer, dan moet de sessie bestaan... Het vreemde is dat het NIET werkt en de array dus gewoon leeg blijft.

Dus cookies uitschakelen, script aanroepen, refresh en array blijft leeg, wie heeft hier een verklaring voor?

PHP:
1
2
3
4
5
  session_start();
  
  print_r($_SESSION);

  $_SESSION['test'] = "sessie werkt";

[ Voor 7% gewijzigd door Martine op 13-01-2009 20:31 ]


Acties:
  • 0 Henk 'm!

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 17-09 22:52
uit de manual :
session.use_trans_sid boolean
session.use_trans_sid whether transparent sid support is enabled or not. Defaults to 0 (disabled).
dus waarschijnlijk staat het gewoon uit.

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je snapt het niet. Lees eens in over PHP session handling en de PHPSESSID URL rewrite. Je moet de PHPSESSID aan de URL toevoegen om de sessie ID te aangeven. Plaats een link in diezelfde page, als het goed is moet PHP de PHPSESSID daaraan toevoegen.

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Beide heren bedankt! d:)b Dat was de oplossing voor die mafffe probleempje 8)7
Pagina: 1