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.
  1. function tep_session_is_registered($variable)  
  2. {  
  3. //  print '.';  
  4.   if ($variable == 'customer_id' && !session_is_registered('customer_id') && !strstr($_SERVER['REQUEST_URI'], 'login.php') && !strstr($_SERVER['REQUEST_URI'], 'logoff.php'))  
  5.   {  
  6.     $_SESSION['history_back'] = $_SERVER['REQUEST_URI'];  
  7.     $_SESSION['history_posted_vars'] = $_POST;  
  8.   }  //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  
  9.   elseif ($variable == 'customer_id' && !session_is_registered('customer_id') && (strstr($_SERVER['REQUEST_URI'], 'login.php') || strstr($_SERVER['REQUEST_URI'], 'logoff.php')) && $_SESSION['history_back'] == '')  
  10.   {  
  11.     $_SESSION['history_back'] = '/';  
  12.     $_SESSION['history_posted_vars'] = array();  
  13.   }  
  14.   
  15.   return session_is_registered($variable);  
  16. }  
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.
  1. print '<form action="' . $_SESSION['history_back'] . '" name="login_post_form" method="post">';  
  2. foreach ($_SESSION['history_posted_vars'as $key => $value)  
  3. {  
  4.   print '<input type="hidden" name="' . $key . '" value="' . $value . '" />';  
  5. }  
  6. print '</form>';  
  7. ?>  
  1. <script language="javascript" type="text/javascript">  
  2.   document.login_post_form.submit();  
  3. </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..