ugrás a tartalomhoz

Login előtti állapot mentése

bandi85 · 2010. Feb. 4. (Cs), 11.28
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.

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);
}
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.

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>
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
 
1

nem értem

errata · 2010. Feb. 4. (Cs), 12.42
nem értem miért küldesz ki valamit a kliensnek hogy aztán visszaküldje a szervernek?
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:
[rendelés feladása form] -> [rendelés feladása visszajelzés]

nem belépet felhasználó:
[rendelés feladása form] -> [login form] -> [rendelés feladása visszajelzés]


amúgy sok oldalon szokták ajax-al megoldani pl: thickbox stb..