Bekijk Volledige Versie : [PHP] probleem met phpsessid ?
Jan Smeelen
30/11/06, 21:38
Zoals bekend, wordt als men geen cookies accepteert
de sessie id in PHP doorgegeven via de URL
als bijv. PHPSESSID=
Wat is nu het probleem :
Betreft een online shop, echter met een link naar een tijdelijke aktie, en
de
verwijzende site heeft als link opgenomen :
www.domeinnaam.xxxnl/index.php?PHPSESSID=45454545 etc.
De klant komt dus binnen, en de sessie id wordt dan automatisch overgenomen,
wat dus NIET de bedoeling is....
Ik heb dit (tijdelijk) enigzins ondervangen door het volgende :
if (!isset($_SESSION['initiated']) or
($check_ip_adres!=$_SESSION['ip_adres']) )
{
$_SESSION = array();
session_regenerate_id();
$_SESSION['initiated'] = true;
$_SESSION['ip_adres'] = $check_ip_adres;
}
echter die $_SESSION['initiated'] is verwacht ik altijd "true" als
de bezoeker geen cookies accepteert. ! ?
De server haalt dan namelijk die gegevens van sessie id met het reeds
bekende sessie_id nr uit de url.
Daarom dus een check op het ip_adres, echter is dit niet 100% waterdicht.
Graag een tip hoe dit op te lossen, of hoe hier mee om te gaan ? :o)
p.s. Uiteraard zit het probleem in de verwijzende url, die uiteraard
aangepast
moet worden, maar ik zou graag in de toekomstige problemen voor
willen zijn.
Bedankt !
Jan.
Branko Collin
30/11/06, 21:38
On Thu, 30 Nov 2006 01:53:36 +0100, "Jan Smeelen"
<ivalid@invalid.invalid> wrote:
>Graag een tip hoe dit op te lossen, of hoe hier mee om te gaan ? :o)
Ik snap je probleem niet. Of er is geen geldige session-id, of er is
er wel een. Geen: je laat de bezoeker de actie zien. Wel: je laat de
bezoeker de actie zien.
--
branko collin
Volk van San Theodoros, ik heb U begrepen.
Jan Smeelen
30/11/06, 21:38
"Branko Collin" <collin@xs4all.nl> schreef in bericht
news:lngtm2dfk8iqpa6ogfl0h0uc9d3gfl6p00@4ax.com...
> On Thu, 30 Nov 2006 01:53:36 +0100, "Jan Smeelen"
> <ivalid@invalid.invalid> wrote:
>
>>Graag een tip hoe dit op te lossen, of hoe hier mee om te gaan ? :o)
>
> Ik snap je probleem niet. Of er is geen geldige session-id, of er is
> er wel een. Geen: je laat de bezoeker de actie zien. Wel: je laat de
> bezoeker de actie zien.
Aktie betreft producten tegen een aanbiedingsprijs, welke
online besteld kunnen worden.
Bij opslaan order/klantgegevens, wordt de klant herkent aan
het unieke sessie_id echter doordat de externe site
?PHPSESSID= opneemt in de link naar de site, krijgt de
session_id altijd de waarde zoals die in de url is doorgegeven.
Je snapt het nu denk ik wel :
Gegevens van vorige bezoekers worden overschreven door
nieuwe / gelijktijdige bezoekers....
Groeten,
Jan.
Branko Collin
30/11/06, 21:38
On Thu, 30 Nov 2006 14:25:58 +0100, "Jan Smeelen"
<ivalid@invalid.invalid> wrote:
>Je snapt het nu denk ik wel :
>Gegevens van vorige bezoekers worden overschreven door
>nieuwe / gelijktijdige bezoekers....
Nee, ik snap het nog steeds niet. Iemand bestelt iets op die site, en
geeft vervolgens een link waarmee die bestelling veranderd kan worden
aan wildvreemden? Waarom zou die iemand dat doen? En hoe lang duren
sessies op die site?
--
branko collin
Volk van San Theodoros, ik heb U begrepen.
Jan Smeelen
30/11/06, 21:38
"Branko Collin" <collin@xs4all.nl> schreef in bericht
news:oe3um2d0sos6qtaqjlqfcntlgip91loqrb@4ax.com...
>
> On Thu, 30 Nov 2006 14:25:58 +0100, "Jan Smeelen"
> <ivalid@invalid.invalid> wrote:
>
>>Je snapt het nu denk ik wel :
>>Gegevens van vorige bezoekers worden overschreven door
>>nieuwe / gelijktijdige bezoekers....
>
> Nee, ik snap het nog steeds niet. Iemand bestelt iets op die site, en
> geeft vervolgens een link waarmee die bestelling veranderd kan worden
> aan wildvreemden? Waarom zou die iemand dat doen? En hoe lang duren
> sessies op die site?
> Volk van San Theodoros, ik heb U begrepen.
Maar mij (Man der Lage Nederlanden) heb je nog steeds niet begrepen ;-D
Een externe site maakt reclame voor een product van een online shop
en bij invoeren van een promotie code in die shop wordt er een bepaalde
korting gegeven.
Sessies duren de standaard tijd van PHP, echter doordat PHPSESSID=
in de verwijzende url staat, krijgen alle bezoekers dezelfde sessie_id
toegewezen.
Alle mensen die mogelijk tegelijkertijd aan het shoppen zijn,
hebben daardoor dus hetzelfde sessie nummer....
Ik hoop dat je het nu begrijpt, zoniet, dan geef ik het op ;o)
Groeten,
Jan.
Michiel de Roo
14/12/06, 10:40
Jan Smeelen wrote:
> Zoals bekend, wordt als men geen cookies accepteert
> de sessie id in PHP doorgegeven via de URL
> als bijv. PHPSESSID=
>
> Wat is nu het probleem :
>
> Betreft een online shop, echter met een link naar een tijdelijke aktie, en
> de
> verwijzende site heeft als link opgenomen :
> www.domeinnaam.xxxnl/index.php?PHPSESSID=45454545 etc.
Hmm, die PHPSESSID zou toch eigelijk alleen opgenomen moeten worden bij
een link binnen hetzelfde domein....
>
> De klant komt dus binnen, en de sessie id wordt dan automatisch overgenomen,
> wat dus NIET de bedoeling is....
>
> Ik heb dit (tijdelijk) enigzins ondervangen door het volgende :
>
> if (!isset($_SESSION['initiated']) or
> ($check_ip_adres!=$_SESSION['ip_adres']) )
> {
> $_SESSION = array();
> session_regenerate_id();
> $_SESSION['initiated'] = true;
> $_SESSION['ip_adres'] = $check_ip_adres;
> }
>
> echter die $_SESSION['initiated'] is verwacht ik altijd "true" als
> de bezoeker geen cookies accepteert. ! ?
>
Kun je niet de referer gebruiken, dat is $_SERVER['HTTP_REFERER'] als ik
me niet vergis. De sessie hoeft alleen opnieuw geinitieerd te worden als
de referer niet je eigen site is.
Wat er dan precies met de originele sessie (van een andere bezoeker dus)
gebeurt weet ik niet precies, maar de kans lijkt me niet zo groot dat die
al bestaat.
Jan Smeelen
14/12/06, 10:40
"Michiel de Roo" <yourlove@welovespam.nl> schreef in bericht
news:457000f3$0$337$e4fe514c@news.xs4all.nl...
> Jan Smeelen wrote:
>> Zoals bekend, wordt als men geen cookies accepteert
>> de sessie id in PHP doorgegeven via de URL
>> als bijv. PHPSESSID=
>>
>> Wat is nu het probleem :
>>
>> Betreft een online shop, echter met een link naar een tijdelijke aktie,
>> en
>> de
>> verwijzende site heeft als link opgenomen :
>> www.domeinnaam.xxxnl/index.php?PHPSESSID=45454545 etc.
> Hmm, die PHPSESSID zou toch eigelijk alleen opgenomen moeten worden bij
> een link binnen hetzelfde domein....
Daar ging ik ook altijd vanuit....
totdat een externe site even per ongeluk die PHPSESSID in de link
ging opnemen (staat vast in zijn html code, en verandert dus niet ! )
Tevens is time to live van zo'n sessie iets van 24 minuten,
en als er dan tegelijkertijd meerdere bezoekers zijn,
dan beinvloeden die elkaars gegevens in dezelfde sessie.
Gelukkig sla ik de referer op bij elke order, en ook het sessie_id
en zodoende heb ik de oorzaak kunnen herleiden, anders was het
zoeken naar een speld in een hooiberg ;o)
> Kun je niet de referer gebruiken, dat is $_SERVER['HTTP_REFERER'] als ik
> me niet vergis. De sessie hoeft alleen opnieuw geinitieerd te worden als
> de referer niet je eigen site is.
>
REFERER nemen is inderdaad een betere optie, dan alleen ip-adres check.
Ik neem beiden nu op in het script voor de zekerheid :o)
Bedankt i.i.g. voor het meedenken !
Groeten,
Jan.