Login előtti állapot mentése
Sziasztok!
A célom: bejelentkezést követően a felhasználó arra az oldalra kerüljön vissza, amelyen volt a bejelentkezés megkezdését megelőzően, illetve vannak olyan form-ok, amelyeket minden felhasználónak látnia kell, ki is tölthetik, de az elküldése után be kell jelentkezni, ezeket a post-olt változókat is meg kell őrizni, hogy a bejelentkezés után úgy kerüljenek felhasználásra az adatok, mintha nem lett volna megszakítva a folyamat.
Úgy szerettem volna megoldani, hogy van egy beépített függvény, ami minden oldalbetöltésnél megvizsgálja, hogy egy SESSION változó létezik-e. Ezt a függvényt módosítottam úgy, hogy:
- amikor azt vizsgálja, hogy a felhasználó be van-e jelentkezve, és még nincs
- nem be- vagy kijelentkezési oldalon volt a felhasználó (hogy pl. többszöri jelszó elrontás után ne a login oldalra legyen visszadobva vagy ha kijelentkezést követően rögtön bejelentkezik és így a kijelentkezésre kerülne vissza)
akkor eltárolom egy SESSION változóban a megtekintett oldalt és egy másikban a POST tömböt.A login-t úgy módosítottam, hogy sikeres azonosítást követően létrehozok egy form-ot az összes POST-olt változóval, az action-je a bejelentkezést megelőző oldal lesz, majd ezt a form-ot submittolom, így elérve azt, hogy az adatok fel legyenek dolgozva, mintha nem lett volna közbeiktatva egy login-olás.2 furcsa dolgot tapasztaltam:
1) IE alatt tökéletesen működik, Firefox-ban nem.
2) elkezdtem keresni a hibát, kiírattam rendre a változókat, hogy rájöjjek, mi a gond, ekkor jó volt Firefox-ban is. Viszont mikor nem írattam ki őket, újra nem volt jó. Próbálgattam, elég, ha csak egy . karaktert kiíratok vele. Az nem megoldható, hogy pl. egy háttérszínű .-t kiíratok vele, mert sok helyre tesz térközöket...
Ezután a login.php-ban is kiírattam változókat: ha kiíratok valamit a képernyőre, hogy megtudjam, mi történik, akkor van értéke a $_SESSION['history_back']-nek; ha nem íratok ki semmit sem, akkor nincs.
Nem jövök rá, mi lehet a jelenség oka.
Előre is köszönöm, ha tudtok segíteni!
Bandi
■ A célom: bejelentkezést követően a felhasználó arra az oldalra kerüljön vissza, amelyen volt a bejelentkezés megkezdését megelőzően, illetve vannak olyan form-ok, amelyeket minden felhasználónak látnia kell, ki is tölthetik, de az elküldése után be kell jelentkezni, ezeket a post-olt változókat is meg kell őrizni, hogy a bejelentkezés után úgy kerüljenek felhasználásra az adatok, mintha nem lett volna megszakítva a folyamat.
Úgy szerettem volna megoldani, hogy van egy beépített függvény, ami minden oldalbetöltésnél megvizsgálja, hogy egy SESSION változó létezik-e. Ezt a függvényt módosítottam úgy, hogy:
- amikor azt vizsgálja, hogy a felhasználó be van-e jelentkezve, és még nincs
- nem be- vagy kijelentkezési oldalon volt a felhasználó (hogy pl. többszöri jelszó elrontás után ne a login oldalra legyen visszadobva vagy ha kijelentkezést követően rögtön bejelentkezik és így a kijelentkezésre kerülne vissza)
akkor eltárolom egy SESSION változóban a megtekintett oldalt és egy másikban a POST tömböt.
function tep_session_is_registered($variable)
{
// print '.';
if ($variable == 'customer_id' && !session_is_registered('customer_id') && !strstr($_SERVER['REQUEST_URI'], 'login.php') && !strstr($_SERVER['REQUEST_URI'], 'logoff.php'))
{
$_SESSION['history_back'] = $_SERVER['REQUEST_URI'];
$_SESSION['history_posted_vars'] = $_POST;
} //ezt azért írtuk be, mert amikor bejelentkezik egy felhasználó, meg kell jegyezni a linket, ahonnan a login-ra lett irányítva, hogy a bejelentkezés után vissza lehessen irányítani oda, ahonnan jött
elseif ($variable == 'customer_id' && !session_is_registered('customer_id') && (strstr($_SERVER['REQUEST_URI'], 'login.php') || strstr($_SERVER['REQUEST_URI'], 'logoff.php')) && $_SESSION['history_back'] == '')
{
$_SESSION['history_back'] = '/';
$_SESSION['history_posted_vars'] = array();
}
return session_is_registered($variable);
}
print '<form action="' . $_SESSION['history_back'] . '" name="login_post_form" method="post">';
foreach ($_SESSION['history_posted_vars'] as $key => $value)
{
print '<input type="hidden" name="' . $key . '" value="' . $value . '" />';
}
print '</form>';
?>
<script language="javascript" type="text/javascript">
document.login_post_form.submit();
</script>
1) IE alatt tökéletesen működik, Firefox-ban nem.
2) elkezdtem keresni a hibát, kiírattam rendre a változókat, hogy rájöjjek, mi a gond, ekkor jó volt Firefox-ban is. Viszont mikor nem írattam ki őket, újra nem volt jó. Próbálgattam, elég, ha csak egy . karaktert kiíratok vele. Az nem megoldható, hogy pl. egy háttérszínű .-t kiíratok vele, mert sok helyre tesz térközöket...
Ezután a login.php-ban is kiírattam változókat: ha kiíratok valamit a képernyőre, hogy megtudjam, mi történik, akkor van értéke a $_SESSION['history_back']-nek; ha nem íratok ki semmit sem, akkor nincs.
Nem jövök rá, mi lehet a jelenség oka.
Előre is köszönöm, ha tudtok segíteni!
Bandi
nem értem
felesleges bevonni a klienst: kiküldöd felvillan neki automatikusan postol, visszamegy a szerverre... feleslegesen terheled a sávászélességet, az ügyfél böngészőjét, és ha én lennék a felhasználó akkor az idegeimet...
(letiltott javascriptnél meg egy szép fehér lapot kapnék)
próbáld meg a login után ugyan abban részben feldolgozni a form-t és aztán visszaküldeni választ...
csak egy példa:
belépet felhasználó útvonala:
nem belépet felhasználó:
amúgy sok oldalon szokták ajax-al megoldani pl: thickbox stb..