ugrás a tartalomhoz

Login hiba javítása

Dzsozef · 2009. Dec. 18. (P), 20.52
Belépési hiba adódot kitudna segíteni a lenti kód alapján.
Akik eddig betudtak lépni, amikor ezt a logint betettük, - szükséges volt más változtatások mellett ezt is változtatni – ezzel nem.
Mi az alábbi belépő problémája, hogy néhány usert kidob másokat nem. Azt néztük a bőngésző magasra állított biztonsági scrolja nem neged senkit sem. Alapértelmezettre állítva /közepes/ többségben beenged, néhány usert nem. Valami apró dolog nem stimmelhet, de nem tudok már rájönni, hogy mi az, fenti eygeseknek igen, másoknak nem miatt???


--- index.php ----
ob_start();
session_start();
$pagenames = explode("/", $_SERVER['REQUEST_URI']);
define('PAGENAME', $pagenames[1]);
require("/misc/helper.php");
require("/misc/variables.php");

switch( PAGENAME )
{
case "tagsag":
$pagename = "tagsag";
include(ROOT . "/controllers/tagsagcontroller.php");
break;
default:
$pagename = "fooldal";
include(ROOT . "/controllers/fooldalcontroller.php");
break;
}
$classname = $pagename."Controller";
$osztaly = new $classname();



--- fooldalcontroller.php ---
class FooldalController
{
function __construct()
{
if($_POST)
{
$this->login();
}
}

function login()
{
$name = $_POST['name'];
$pass = md5($_POST['pass']);
$data = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE name
LIKE BINARY '".$name."' AND pass = '". $pass ."' AND status = 1
LIMIT 1", MYSQL_ASSOC));
if( $data['uid'] )
{
unset( $data['pass'], $data['pass_sima'] );
if( !$data['aktivalo_kod'] )
{
session_start();
foreach($data as $key => $v)
{
$_SESSION["u"][$key] = $data[$key];
}
header("Location: http://.../tagsag");
exit();
}
}
}
}



--- tagsagcontroller.php ----
class TagsagController
{
function __construct( )
{
if( !$_SESSION["u"] )
{
session_start();
unset($_SESSION["u"]);
session_destroy();
setcookie(session_name(), "");
header("Location: ./fooldal");
exit();
}
##
## innentől jönnek a tagsági adatok, oldalak, stb ....
## ide már nem jut be jó pár user, de legtöbben bejutnak
##
$this->startFunction( SUBPAGE );
}
}

-----------------------------------------------------
 
1

A belépési hiba böngésző független.

Dzsozef · 2009. Dec. 18. (P), 20.54
A belépési hiba böngészőtől függetlenül fenn áll.
2

kérdés

a.d.a.m · 2009. Dec. 19. (Szo), 00.41
Először is, kérlek legközelebb használj kódkiemelőt, mert így nehézkesen olvasható a forrás.

A kérdések:

1. ennél a résznél, ha a $_POST tömb meglétét ellenőrzöd nem helyesebb a:
if($_POST)
{
$this->login();
}
helyett mondjuk ez a forma?
if(isset($_POST) && count($_POST)>0)
{
$this->login();
}
2. A $_SESSION["u"] értéke TRUE/FALSE, vagy ugyancsak a létezését vizsgálod?

3.
if( !$_SESSION["u"] )
{
session_start();
unset($_SESSION["u"]);
session_destroy();
//a session_name()-nek nem feltétlenül lesz értéke ha előtte megsemmisíted a munkamenetet.
setcookie(session_name(), "");
header("Location: ./fooldal");
//az exit nem hajtódik végre mert újratöltöd a lapot, az előző sorral
exit();
}
4. feltételezem állandó adatbázis kapcsolatot használsz, ugyanis a mysql_query-ben nem jelölöd az adatbázis azonosítót, azonban itt rossz helyen van a zárjel:
$data = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE name
LIKE BINARY '".$name."' AND pass = '". $pass ."' AND status = 1
LIMIT 1", MYSQL_ASSOC));
helyesen:
$data = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE name
LIKE BINARY '".$name."' AND pass = '". $pass ."' AND status = 1
LIMIT 1"), MYSQL_ASSOC);
5. a php nem ad valamilyen hibaüzenetet?
4

Köszönöm a válaszaitokat. 1.

Dzsozef · 2009. Dec. 19. (Szo), 14.37
Köszönöm a válaszaitokat.
1. Azért nézem így egyenlőre, hogy hátha így bejutnak az userek.
2. A $_SESSION["u"] -nél a meglétét vizsgálom, tudom, nem biztonságos, de a teszt idejére, hogy egyáltalán betudnak-e lépni. De nem mindenki.
3. na most az a gond, hogy ebbe a részbe már nem is kellene bejutnia az usernek, mivel úgy belépett, és van $_SESSION.
4. Igen, állandó a kapcsolat, a zárójelhiba annak köszönhető, hogy nem kimásoltam a lekérdezést, újra beirtam.
5. Az a gond, hogy mi nem kapunk semmilyen üzenette, mivel nálunk tökéletesen működik. Csak néhány user jelzéseiből tudunk informálódni, és az elég csekély.
7

Hibakeresés

vbence · 2009. Dec. 19. (Szo), 19.34
Próbáld reprodukálni a hibát. Enélkül nem érdemes semmit sem léni.
3

karakterek

nemalevi · 2009. Dec. 19. (Szo), 09.29
Szerintem a karakterek osszehasonlitasaval lesz a problema.
Ird be a parancsodat ("SELECT * FROM users WHERE name
LIKE BINARY '".$name."' AND pass = '". $pass ."' AND status = 1
LIMIT 1") a behelyettesitett adatokkal kozvetlenul mysqlbe es nezd meg hogy mi tortenik akkor.
5

A karakterek

Dzsozef · 2009. Dec. 19. (Szo), 14.46
A karakterek összehasonlításával, azért nem lehet gond, mert nagyon sok user be tud lépni, köztük Mi is.
Ha beírjuk direktben a MySQL -be, akkor visszajön keresett a sor.
Alapjában véve a "tagsagcontroller.php" oldalon belül a

if( !$_SESSION["u"] )
{
//session_destroy(); 
//...  
} 

//Ide már nem jut el néhány user -> 
$this->StartFunction();
részig eljut minden további nélkül mindegyik user.
Természetesen úgy, hogy az adatbázis lekérésen keresztül megy.
De itt valamiért néhányat visszadob kiléptetve.
6

Gondoltunk arra, hogy esetleg

Dzsozef · 2009. Dec. 19. (Szo), 15.09
Gondoltunk arra, hogy esetleg valamiféle szerver (php.ini) gond, vagy apache '.htaccess' gond lehet. De úgye akkor senkit sem engedne be. Az is igaz, hogy ha a php kódban bárhol is hiba lenne, akkor szintén nem lehetne bejutni.
Ezért az egyedi böngésző beállításokra gyanakszunk.

Fent írtuk, hogy más rendszerben / szemléletben volt elkészitve.
A jelenlegi változatban (amit küldtem kódot) adódott ez a hiba, hogy az akkori tagjaink be tudtak lépni, most nem.
Ezért a böngészőjének beállítási hibája sem lehet egyértelmű, mivel korábban beléphet, most miért nem, miközben nem állított semmit a böngészőjén.

Ezért van ez az abszolút érthetetlenség.
Úgyanakkor valahol, valami apró hiba biztosan van, amit esetleg a böngésző nem értelmezne?
Mi meg nem tudjuk infó hiányában, hogy mit nem.

Köszönöm előre is a válaszaitokat.
8

cookie

Poetro · 2009. Dec. 19. (Szo), 21.48
Nem lehet, hogy az illetőknél csak a sütik vannak kikapcsolva? Vagy valami más sütihez kapcsolódó beállítás nem a szokványos? Hirtelen másra nem tudok gyanakodni, mert ez marad, ami nem szerver oldali.
9

Néhány dolog

gphilip · 2009. Dec. 19. (Szo), 22.58
Hát remélem nem debugging leckéket kell adni :)

DE
Mielőtt a $_SESSION változó bármelyik értékét le akarod kérdezni, ELŐTTE kell meghívnod a session_start();-ot, és nem utána. Ez a függvény publikálja a $_SESSION változót. Ez a tagság scriptedben pont fordítva van. Ez a függvényhívás lehet akár a scripted első sora is, vagy bármi.

Ha nem akarod mindenhova odapakolni, akkor a php konfigurációjában a session.auto_start értéket állítsd 1-re.

Mindenesetre néhány tipp, ami okozhat még gondot, és kijavítása mindneképpen fontos:

- ESCAPE-elés az adatbázis lekérdezésben!!!!! abszolút injection sebezhető a kódod így. Ez egyébként szintén okozhat belépési problémákat is.

- a login methodban a session_start(); után: $_SESSION['u'] = array(); tehát előtte csinálj egy tömböt, amit feltöltesz.

- Notice-ok kijelzését kapcsold be PHP-ban, nagyon sok turpiszsára fény fog derülni.

- POST-ot így illik ellenőrizni: $_SERVER['REQUEST_METHOD']=='POST'

- A $_SESSION-ban egy tömb kulcs letezését meg így: array_key_exists...

Remélem segít...
10

"ELŐTTE kell meghívnod a

Dzsozef · 2009. Dec. 19. (Szo), 23.51
"ELŐTTE kell meghívnod a session_start();"
A fenti kód szerint ez így van, ez közvetlen az index.php (fő oldal) ban van, amelybe be van ágyazva az összes többi oldal, vagy nem tudom mire gondolsz?!
Bár annyit, hogy most betettem a 'TagsagController' osztály konstruktorába a lekérdezés elé.

"a php konfigurációjában a session.auto_start értéket állítsd 1-re"
Ez eleve '1' -re volt állítva a .htaccess -ban

"- ESCAPE-elés az adatbázis lekérdezésben!!!!! "
Ez benne van alapesetként, csak nem akartam túl sok kódrészletet beletenni. De a lényeg benne van.

"- A $_SESSION-ban egy tömb kulcs letezését meg így: array_key_exists..."
Ez számíthat a kidobásban, hogy így nézem, vagy !isset($_SESSION['u']['uid']) -el ??

A többit javítom, ahogy írtad.
Az auto.start, illetve a session_start(); elhelyezkedésének köszönhető, hogy némely usert nem enged be.
Mert úgye a legtöbb bejut.

Köszönöm eddigi segítségeteket, de ezek javításával, meglátjuk, hogy mi lesz. De ha van még ötletetek, szívesen várom.

Előre is köszönöm.