Forum » Izdelava spletišč » Podvojeni session ID-ji v PHP?
Podvojeni session ID-ji v PHP?
poweroff ::
Problem je sledec...
najprej recem:
ini_set("session.cookie_lifetime", "0");
Potem naredim tole:
// Initialize session
session_start();
// Register session and set number of session visits variable to 1
if (!session_is_registered('sess_visits')) {
session_register('sess_visits');
$sess_visits = 1;
}
else {
$sess_visits++;
}
if ($sess_visits == 1) {
...
// Save session, IP, etc. into database
$sql = "INSERT INTO wc_sessionident SET sessid = '$sessid', ...";
...
}
Se pravi - ce je session spremenljivka $sess_visits enaka 1, potem zadevo zabelezi v bazo, sicer pa ne.
OK, to je teorija. V praksi pa se zgodi tole - v bazi se trikrat pojavijo
podvojeni session ID-ji!
Ce jaz prav razumem, bi po definiciji smel ob vsakem novem obisku dobiti nov
session ID, ki je 'unique'. Jaz pa na zacetku preverim ali je nastavljena
session variabla 'sess_visits' - in ce ni, jo nastavim na 1, sicer pa povecam.
Ce in samo ce je ta variabla enaka 1, se zadeva zapise v bazo.
Torej je po definiciji ta zadeva samo enkrat enaka 1, potem pa se le povecuje.
Torej bi se smela samo enkrat zapisati v bazo. Pa se ne, zapise se dvakrat.
Uporabniki, ki se jim to zgodi uporabljajo: eden MSIE 5.5 & Win95, eden MSIE
5.5 & Win98 eden pa MSIE 6.0 & WinNT 4.0.
Vmes, ko se zgodi ta "preskok" da se session ID ponovno zapise pa mine
razlicno casa - od par ur, do ene sekunde. Tako da cas po mojem ne vpliva na
to dogajanje.
Imena hosta nima nobeden, vendar sklepam da tudi ce bi bil
uporabnik preko dialupa, se vmes odklopil (browser pusti prizgan) in se
priklopi nazaj - kar pravzaprav pomeni da spremeni IP številko - bi
'sess_visits' moral ostati nespremenjen, ne pa da se resetira na 1.
Kaksna ideja kaj bi bilo lahko narobe in kako zadevo resiti?
najprej recem:
ini_set("session.cookie_lifetime", "0");
Potem naredim tole:
// Initialize session
session_start();
// Register session and set number of session visits variable to 1
if (!session_is_registered('sess_visits')) {
session_register('sess_visits');
$sess_visits = 1;
}
else {
$sess_visits++;
}
if ($sess_visits == 1) {
...
// Save session, IP, etc. into database
$sql = "INSERT INTO wc_sessionident SET sessid = '$sessid', ...";
...
}
Se pravi - ce je session spremenljivka $sess_visits enaka 1, potem zadevo zabelezi v bazo, sicer pa ne.
OK, to je teorija. V praksi pa se zgodi tole - v bazi se trikrat pojavijo
podvojeni session ID-ji!
Ce jaz prav razumem, bi po definiciji smel ob vsakem novem obisku dobiti nov
session ID, ki je 'unique'. Jaz pa na zacetku preverim ali je nastavljena
session variabla 'sess_visits' - in ce ni, jo nastavim na 1, sicer pa povecam.
Ce in samo ce je ta variabla enaka 1, se zadeva zapise v bazo.
Torej je po definiciji ta zadeva samo enkrat enaka 1, potem pa se le povecuje.
Torej bi se smela samo enkrat zapisati v bazo. Pa se ne, zapise se dvakrat.
Uporabniki, ki se jim to zgodi uporabljajo: eden MSIE 5.5 & Win95, eden MSIE
5.5 & Win98 eden pa MSIE 6.0 & WinNT 4.0.
Vmes, ko se zgodi ta "preskok" da se session ID ponovno zapise pa mine
razlicno casa - od par ur, do ene sekunde. Tako da cas po mojem ne vpliva na
to dogajanje.
Imena hosta nima nobeden, vendar sklepam da tudi ce bi bil
uporabnik preko dialupa, se vmes odklopil (browser pusti prizgan) in se
priklopi nazaj - kar pravzaprav pomeni da spremeni IP številko - bi
'sess_visits' moral ostati nespremenjen, ne pa da se resetira na 1.
Kaksna ideja kaj bi bilo lahko narobe in kako zadevo resiti?
darh ::
hmm.. jest bi najprej preveril, če ta sessionID že obstaja v bazi... če obstaja, vzemeš tist counter pa ga povečaš za eno.... če pa ne, ga nastaviš na 1 in shraniš v bazo... hehe.. tko.. zvito :)
Excuses are useless! Results are priceless!
poweroff ::
Hja, to je točno to kar ne želim. Ker iskanje po bazi je seveda možno zelo enostavni implementirati, samo zelo vpliva na hitrost samo. Predstavljaj si da je zadeva namontirana na strežniku kjer je oroooomno obiska...
darh ::
kolk pa je zate ogrmno obiska ?
kolk pa misliš da traja dobro načrtovan search po bazi ?
če te te tolk skrbi za hitrost pa rajš kr v cju napiši cgi ga skompalej.. to bo pa šele hitro pol... pa brez shranjevanja v fajle ali bazo.. kij direkt v memory... wow... speeeed..
kolk pa misliš da traja dobro načrtovan search po bazi ?
če te te tolk skrbi za hitrost pa rajš kr v cju napiši cgi ga skompalej.. to bo pa šele hitro pol... pa brez shranjevanja v fajle ali bazo.. kij direkt v memory... wow... speeeed..
Excuses are useless! Results are priceless!
poweroff ::
Hmm, odkrito povedano nimam občutka kdaj bi zadeva začela delovati prepočasi... jasno mi je tudi kako zadevo rešiti s izskanjem po bazi, vender me jezi da tile sessioni ne delajo kot je treba - kot bi po definiciji morali...
BTW: kaj se pa zgodi če dam session_id za prmary key v MySQL tabeli? Če bi se potem pojavil podvojen key, bi verjetno nazaj dobil kakšno napako? V tem primeru mi ne bi bilo treba implementirati searcha...
BTW: kaj se pa zgodi če dam session_id za prmary key v MySQL tabeli? Če bi se potem pojavil podvojen key, bi verjetno nazaj dobil kakšno napako? V tem primeru mi ne bi bilo treba implementirati searcha...
cahahopie ::
Hmm... men tud neki kao včas jav.. o podvojenih session idjih.. toda to mi jav baza (prek mysq_error) zato bom tam kr odstrano to zadevco...
Neki še... v glavi.php se pr men nastavi cookie za anonimnega userja (kat koristi za ketere teme je človk obiskal) in zapiše v bazo, če pa je že cookie pa nič ne nardi. Toda.. včas mi sploh ne nastav piškota..in se kot rezultat vsaj pr men vid.. da ni tisith mapic ob temah. Mislite, da je fora v tem, da mam včasih "work offline" in a to zadevo spregledam...:D
Pač... tu pa tam kak mali bug...drgač pa stvar laufa...
Neki še... v glavi.php se pr men nastavi cookie za anonimnega userja (kat koristi za ketere teme je človk obiskal) in zapiše v bazo, če pa je že cookie pa nič ne nardi. Toda.. včas mi sploh ne nastav piškota..in se kot rezultat vsaj pr men vid.. da ni tisith mapic ob temah. Mislite, da je fora v tem, da mam včasih "work offline" in a to zadevo spregledam...:D
Pač... tu pa tam kak mali bug...drgač pa stvar laufa...
poweroff ::
Mogoče do tega pride če uporabnik dela offline in gre nazaj (Back) v browserju... mogoče se potem vrednosti resetirajo nazaj. Jaz sem poiskušal to umetno sprožiti, pa miniuspelo, ker imam stalno povezavo. Ampak izgleda da bo res treba narediti preverjanje po bazi...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [PHP] Prijava uporabnika(forum)Oddelek: Programiranje | 1573 (1342) | rokpok |
» | portal ostal, baza slaOddelek: Izdelava spletišč | 1829 (1714) | bombacina |
» | oop+php+sessionsOddelek: Izdelava spletišč | 2588 (55) | cahahopie |
» | Tracking v PHPjuOddelek: Programiranje | 1709 (1594) | darh |
» | PHP logiranje na stranOddelek: Programiranje | 1460 (1186) | ahac |