Login hiba javítása
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 );
}
}
-----------------------------------------------------
■ 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 );
}
}
-----------------------------------------------------
A belépési hiba böngésző független.
kérdé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:
3.
Köszönöm a válaszaitokat. 1.
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.
Hibakeresés
karakterek
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.
A karakterek
Ha beírjuk direktben a MySQL -be, akkor visszajön keresett a sor.
Alapjában véve a "tagsagcontroller.php" oldalon belül a
Természetesen úgy, hogy az adatbázis lekérésen keresztül megy.
De itt valamiért néhányat visszadob kiléptetve.
Gondoltunk arra, hogy esetleg
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.
cookie
Néhány dolog
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...
"ELŐTTE kell meghívnod a
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.