MySQL + Session alapú bejelentkezés – részletesen

A tutorial a PHP-n belüli session és MySQL alapú bejelentkezésről szól. Mindent részletesen leírok, nem kell félni! :)

Először is:

Mi az a SESSION?

A session jelentése munkamenet.
PHP-ban a

session_start();

funkcióval indíthatjuk el a sessiont.

A session kezdetének – ugyanúgy, mint a headereknek – a php fájl elején célszerű lenniük. Különben könnyen “Headers already sent” típusú hibákba botlunk.
A php-ban a $_SESSION tömb tartalmazza a session adatokat. Ez szerveroldalon van tárolva, nem kliensoldalon, de a session azonosítót elküldjük a kliensnek, ezért nem árt különböző dolgokat (pl. IP cím, timeout) ellenőrizni. De erről később.

A $_SESSION használata egyszerű, például az alábbi script eltárolja az oldalbetöltés idejét, majd kiírja a kliensnek:

<?php
session_start(); // elindítjuk a munkamenetet, a kliensnek elküldjük az azonosítót
if (!is_numeric($_SESSION['Elso_login'])) $_SESSION['Elso_login'] = time(); // ha még nem járt itt ezzel a munkamenettel, akkor most jár itt először
echo 'Első látogatás: '.date("Y-m-d H:i:s", $_SESSION['Elso_login']); // remélem ezt nem kell elmagyaráznom
?>

Na remélem, valamennyire kezdtek képben lenni a session használatáról, úgyhogy csapjunk a lecsóba!

Kezdetnek hozzuk létre a mysql táblaszerkezetet:

DROP TABLE IF EXISTS `Users_login`;
CREATE TABLE `Users_login` (
 `Id` bigint NOT NULL auto_increment PRIMARY KEY,
 `Username` longtext NOT NULL,
 `Password` varchar(100),
 `Fullname` longtext,
 `Email` longtext NOT NULL,
 `Rights` int(1) NOT NULL DEFAULT 1
);
 
DROP TABLE IF EXISTS `Users_session`;
CREATE TABLE `Users_session` (
 `Id` bigint NOT NULL auto_increment PRIMARY KEY,
 `Uid` bigint NOT NULL,
 `Session_id` longtext NOT NULL,
 `Host` longtext NOT NULL,
 `Time` bigint NOT NULL
);

Ezzel létrehoztuk MySQL táblánkat, ami nem a leginformatívabb, de azért az alap dolgokra jó. Persze ezt bármikor kiegészíthetjük további mezőkkel. A második tábla a Munkamenetek eltárolására fog szolgálni.

Minden fájl, amit meghívunk, le kell, hogy ellenőrizze, nem-e “kívülről” akarják-e megnyitni. Ezért létrehozzuk a vedelem.php fájlt, és beleírjuk:

<?php
if (basename($_SERVER['SCRIPT_FILENAME']) != 'index.php') die('A hozzáférés megtagadva.');
?>

Aztán szükségünk lesz egy php-ra, ami a felhasználó ip címét adja meg.
Nyissuk meg a getip.php -t és írjuk bele:

<?php
function getip() {
   if (validip($_SERVER["HTTP_CLIENT_IP"])) {
       return $_SERVER["HTTP_CLIENT_IP"];
   }
   foreach (explode(",",$_SERVER["HTTP_X_FORWARDED_FOR"]) as $ip) {
       if (validip(trim($ip))) {
           return $ip;
       }
   }
   if (validip($_SERVER["HTTP_PC_REMOTE_ADDR"])) {
   		return $_SERVER["HTTP_PC_REMOTE_ADDR"];
   } elseif (validip($_SERVER["HTTP_X_FORWARDED"])) {
       return $_SERVER["HTTP_X_FORWARDED"];
   } elseif (validip($_SERVER["HTTP_FORWARDED_FOR"])) {
       return $_SERVER["HTTP_FORWARDED_FOR"];
   } elseif (validip($_SERVER["HTTP_FORWARDED"])) {
       return $_SERVER["HTTP_FORWARDED"];
   } else {
       return $_SERVER["REMOTE_ADDR"];
   }
}
function validip($ip) {
   if (!empty($ip) && ip2long($ip)!=-1) {
       $reserved_ips = array (
       array('0.0.0.0','2.255.255.255'),
       array('10.0.0.0','10.255.255.255'),
       array('127.0.0.0','127.255.255.255'),
       array('169.254.0.0','169.254.255.255'),
       array('172.16.0.0','172.31.255.255'),
       array('192.0.2.0','192.0.2.255'),
       array('192.168.0.0','192.168.255.255'),
       array('255.255.255.0','255.255.255.255')
       );
 
       foreach ($reserved_ips as $r) {
           $min = ip2long($r[0]);
           $max = ip2long($r[1]);
           if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
       }
       return true;
   } else {
       return false;
   }
}
?>

Most hozzunk létre egy index.php fájlt:

<?php
session_start();
###
/* Beállítások */
@$charset = 'utf-8'; // Az oldal karakterkódolása
header("Content-type: text/html; charset=".$charset);
$mysql_host = 'localhost'; // MySQL host
$mysql_user = 'root'; // MySQL felhasználó
$mysql_pass = ''; // MySQL jelszó
$mysql_data = 'database'; // MySQL adatbázis
$timeout = 3600; // Hány másodperc inaktivítás után legyen logout
?>
<HTML><HEAD><TITLE>Lorem Ipsum</TITLE></HEAD><BODY>
<a href="index.php?">Főoldal</a> | <a href="index.php?page=details">Felhasználói adatok</a><br>
<?php
/* Az oldalakat deklaráljuk */
$oldalak = array(
'kapcsolat' => 'contact.php',
'foo' => 'bar.php',
'lipsum' => 'loremipsumdolorsitamet.php',
'' => 'fooldal.php', // ha nincs megadva, hogy melyik oldal kell, akkor a fooldal.php legyen
'details' => 'adatok.php',
);
###
include('getip.php');
###
/* MySQL Kapcsolódás */
$connection = @mysql_connect($mysql_host, $mysql_user, $mysql_pass); // MySQL kapcsolódási próba
if (!$connection) die('A MySQL kapcsolódás sikertelen volt. Hiba: '.mysql_error());
$database = @mysql_select_db($mysql_data, $connection); // Adatbázis kiválasztása
if (!$database) die('Az adatbázis kiválasztása sikertelen volt. Hiba: '.mysql_error());
###
/* Nézzük meg, hogy nem-e akarunk épp bejelentkezni */
if (isset($_POST['Username']) && isset($_POST['Password']))
{
 $query = @mysql_query("SELECT * FROM `Users_login` WHERE `Username` = '".mysql_real_escape_string($_POST['Username'])."' AND `Password` = '".sha1(md5($_POST['Password']))."'");
 $row = mysql_fetch_array($query);
 @mysql_free_result($query);
 if (!empty($row['Id']))
 {
  @mysql_query("DELETE FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
  @mysql_query("INSERT INTO `Users_session` (`Uid`, `Session_id`, `Host`, `Time`) VALUES ('".$row['Id']."', '".mysql_real_escape_string(session_id())."', '".getip()."', '".time()."')");
 }
 else
 {
  echo "Rossz felhasználónév vagy jelszó.";
 }
}
###
if (isset($_GET['logout']))
{
 @mysql_query("DELETE FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
}
###
/* Nézzük meg, hogy nem-e akarunk épp regisztrálni */
if (isset($_GET['register']))
{
if (isset($_POST['Reg_username']) && isset($_POST['Reg_password']) && isset($_POST['Reg_email']))
{
 if (empty($_POST['Reg_fullname'])) $_POST['Reg_fullname'] = 'Ismeretlen';
 $query = @mysql_query("SELECT * FROM `Users_login` WHERE `Username` = '".mysql_real_escape_string($_POST['Reg_username'])."'");
 $row = mysql_fetch_array($query);
 @mysql_free_result($query);
 if (!empty($row['Id']))
 {
  echo "Már regisztrált név.";
 }
 else
 {
  @mysql_query("INSERT INTO `Users_login` (`Username`, `Password`, `Email`, `Fullname`) VALUES ('".mysql_real_escape_string($_POST['Reg_username'])."', '".sha1(md5($_POST['Reg_password']))."', '".mysql_real_escape_string($_POST['Reg_email'])."', '".mysql_real_escape_string($_POST['Reg_fullname'])."')");
  echo "Regisztráltál!";
 }
}
else
{
 include ('register.php');
}
}
###
/* Felhasználó ellenőrzése */
$query = @mysql_query("SELECT * FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
$row = mysql_fetch_array($query);
@mysql_free_result($query);
if (!$row['Id'] || $row['Time'] + $timeout < time() || $row['Host'] != getip())
{
 include ('login.php'); // Bejelentkező űrlap
}
else
{
 if (!empty($oldalak[$_GET['page']]))
 {
  if (!file_exists($oldalak[$_GET['page']]))
  {
   echo "Az oldal nem található.";
  }
  else
  {
   $query = @mysql_query("SELECT * FROM `Users_login` WHERE `Id` = '".$row['Uid']."'");
   $old_user = mysql_fetch_assoc($query);
   @mysql_free_result($query);
   unset($old_user['Password']);
   $user = array();
   foreach ($old_user as $n => $v)
   {
    $user[$n] = htmlspecialchars(stripslashes($v));
   }
   unset($old_user);
   include ($oldalak[$_GET['page']]);
   echo "<hr><a href='index.php?logout'>Kijelentkezés</a>";
  }
 }
 else
 {
  echo "Az oldal nem található.";
 }
}
?>
</BODY></HTML>

Fontos, hogy minden meghívott oldalon legyen beszúrva a következő kód:

require('vedelem.php');

Ez biztosítja, hogy bejelentkezés nélkül ne lehessen betölteni a lapot.

Írjunk egy egyszerű bejelentkező formot is, ahol az Username és a Password mezők nem hagyhatók el: login.php:

<?php require('vedelem.php'); ?>
<H3>Bejelentkezés</H3>
<FORM method='POST' action='index.php'>
User: <INPUT type='text' name='Username'> # <br>
Pass: <INPUT type='password' name='Password'> # <br>
<INPUT type='submit' value='Bejelentkezés'> - <a href='index.php?register'>
Regisztráció</a>
</FORM>

register.php:

<?php require('vedelem.php'); ?>
<H3>Regisztráció</H3>
<FORM method='POST' action='index.php?register'>
User: <INPUT type='text' name='Reg_username'> # <br>
Pass: <INPUT type='password' name='Reg_password'> # <br>
Mail:  <INPUT type='text' name='Reg_email'> # <br>
Fullname:  <INPUT type='text' name='Reg_fullname'> # <br>
<INPUT type='submit' value='Regisztráció'>
</FORM>

Természetesen ezeket szerkesszétek át, csak egy példát mutattam be :)

Példának okáért hozzunk létre egy fooldal.php és egy adatok.php fájlt is:

<?php
require('vedelem.php');
echo "Üdvözöllek ".$user['Fullname']." (".$user['Username'].")
\n";
?>
Az adataid:<br>
<?php
require('vedelem.php');
var_dump($user);
?>

A behívott fájlokon belül a $user tömbben vannak eltárolva a felhasználói adatok.
Ha van kérdés, várom hozzászólásokban :)

Utóirat: ez a leírás nem egy komplett login rendszert kívánt magába foglalni, csak egy működő bevezető a világába (például adminisztrációs felület nincs benne, és a regisztrációs form adatai is hagynak maguk után kivánnivalót, de ha már egy ideje foglalkozol a php-val, ezek se lesznek nehezek! ;)) :)

77 HOZZÁSZÓLÁS

  1. Egy adminisztrációs felületen mik lehetnek ami ehhez kapcsolódik? Törlés, módosítás meg ilyesmi? Csak ilyenre tudtam gondolni, Te?

  2. Egy adminisztrációs felületen lehet például felhasználó hozzáadása, esetleg adminisztrátorrá tétele, bár ehhez módosítani kell a táblán, de az nem nagy ördöngősség; továbbá jogosultságokat beállítani (pl. milyen fájlhoz férjen hozzá, kommentelhessen-e, stb), törölni, de igazából ha használod valamire, akkor előbb-utóbb rájössz, mire is van szükséged :)

  3. lightgod: ez egyertelmu, nem is azoknak keszult akik ‘kenik-vagjak’ ezt a temat, hanem akiknek ez [eddig] ismeretlen [volt] :)

  4. Egesz jo lett… Bar en maradok a W-Sys.Engine-nel =)

    Egy nagy problemam, hogy ha letrehozol egy oldalt, akkor az tul maceras =/
    Es ha mar megadott oldalak, vannak akkor mar azt is adatbazisban tarolnam… Es oda konnyebb jogosultsagot is kezelni, hogy van-e joga megnezni vagy pl az alapjan leht kiiratni a menupontokat…

    Tovabba… Idovel majd rajossz par dologra, amit akar csak fel ev mulva is… le nem irnal, ha kinoznak sem =)

  5. Én kipróbáltam, sajnos eléggé rosszul irtad a kodot, mert egy kezdő ezt leszedi, az életbe nem csinálja meg…

    Kezdük ott, hogy a loginba nem kell behivni a vedelem.php-t, sem a register-be..
    Másodszor SQL egy kezdőnek?? Sokkal egyszerűbb lenne szerveroldali txt adatbázissal, ugyanis abban az esetben sokkal gyorsabb minden, mivel a szerver magávla komunikál, nem egy tőle különeső géppel(SQL szerver)
    Finomíts még rajta..

  6. Hi!
    “egy kezdő ezt leszedi, az életbe nem csinálja meg…” -> A kezdo alatt azt ertettem, hogy fogalma sincs, mi az a session, es hogy a rakba kell hasznalni. Nem az analfabetakat, akik csak ugy tudnak ‘mukodtetni’ egy php scriptet, hogy atirjak azt amit a szajukba ragnak. Ha Te ilyen vagy, tanulj meg, es erteni fogod.

    “Kezdük ott, hogy a loginba nem kell behivni a vedelem.php-t, sem a register-be..” -> szerinted ha ‘kivulrol’ tolti be a scriptet, az esetleges funkciok, mysql esatobbi benne lesznek a fileban? Ha pedig kiegeszitjuk style-al, akkor meg magatol ertetodo, hogy csak azzal egyutt mukodhet…

    “Sokkal egyszerűbb lenne szerveroldali txt adatbázissal, ugyanis abban az esetben sokkal gyorsabb minden, mivel a szerver magávla komunikál, nem egy tőle különeső géppel(SQL szerver)” -> egy login rendszer TXT adatbazissal? Hol elsz te, mar megbocsass?! A torhetosegtol kezdve a fapadossagig meg a hulyesegig ebben az otletedben minden benne van. Es akkor most egyszerubb vagy gyorsabb? Kulonben meg a MySQL-t egyaltalan nem tekintem lassunak, a leiras pedig MySQL-rol szolt.

    Ha van meg otlet, varom!

  7. balintx: Enter építő jellegű kritikát adott (megjegyzem igaza is volt, a kód felépítésével nekem is vannak gondjaim, bár azzal egyetértek, hogy az SQL nem annyira veszélyes egy ilyen tutorialban), ettől függetlenül nem kéne személyeskedni (a “Ha Te..” kezdetű mondattal vannak fenntartásaim).

    És akkor most mint szakmabeliek egymás között: a txt alapú adattárolásnak is megvannak a maga előnyei, például ha a doc rooton kívül teszed, akkor máris nem tudja senki letölteni, te viszont tudod használni. Ráadásul sebességben pár ezer sorig tényleg előrébb leszel, ha úgy használod, hogy minden usernek pontosan megadott méretet tartasz fenn (pl.: usernév 8 karaktere, jelszó 40 karaktere, személynév 25 karaktere= 72). Így 72 byte-os ugrásokkal olvasod a 8 byte-okat és ellenőrzöd, hogy megegyezik-e a kért userrel, ha igen, kiszeded a maradék 65 byteot is, és máris vissza tudod adni a jelszó hasht. Ha még ráadásul a userek névszerinti sorrendben is vannak, akkor bináris kereséssel marha gyorsan meg tudod találni, cserébe a beszúrás ideje megnő logn-re.

    Sebességben pedig sokat nyersz, mivel a rendszernek nem kell állandóan kontextus cserével szenvednie. A hálózati kapcsolat (amiből az adatbázishoz kapcsolódás miatt nyitsz egy újat) a rendszer felelőssége, tehát állandóan ugrál a vezérlés az Apache-Rendszer-MySQL között oda vissza, text fájllal végig az Apache-ban maradsz és csak a file kezelő rendszerhívásoknál szól közbe a rendszer (viszont így is jóval kevesebb context switched van). Cserébe nincs tranzakció-kezelésed, és egy hibára egész gyorsan meg tud halni ez a rendszer.

    Aztán van egy pont (nagyságrendben nem az a userszám, amit olyanok kapnak, akik olvassák ezt a tutorialt), ahol ez az egész már tényleg összeomlik a terhelés miatt, mert nincs mögötte egy B-fád, és az írási/olvasási lockok aránya nagyon megnő.

    (Megjegyzem a kettő között az arany középút egy SQLite lenne, nincs context switch, mégis relációs modellben dolgozol)

    BlackY

  8. Csak egy apro epito szandeku eszrevetel reszemrol: longtext mezok? miert? Nem hiszem, hogy pl. valakinek a felhasznaloneve 4294967295 karakter hosszu lenne ;)

  9. Jó kis tutorial, nekem tetszik, pedig kezdő vagyok.
    Látom az angol billentyűzet a menő, senki nem használ ékezeteket :D
    A balintx csávókáról pedig ordít, hogy nem bírja a kritikát :)
    Úgyhogy ne oktassátok ki, hanem csináljatok ti is ilyen anyagokat, hadd tanuljak valamit :)

    JoeBlack2060

  10. :( :( :( …mindent pontosan kovettem a fenti peldaban..de sajnos a mysql visszautasitja a logint.

    Miert?

    A linuxon mint root vagyok bejelentkezve .

    Tisztelettel,
    Zoli B.

  11. Szupper script, de van egy kis problemam vele…
    localhostban mukodik, de ha feltoltom ultraweb-re, ezt a hibakodot kapom:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in proba1/index.php on line 82

    mi lehet a baj?

  12. java123: biztosan működik az ultrawebes mysql? és mi is pontosan a 82-es lineod?

  13. hát szerintem ez egy ku*va jó leírás lett megértek belőle mindent kezdő létemre, egy olyan leírás is érdekelne hogy lehetne szerkeztő felületet csinálni ;)

  14. MySQL + Session alapú bejelentkezés

    ha ez a téma, akkor nem értem miért kell 20féle baromságról itt feleslegesen vitázni.
    ez arról szól, hogy értsük meg a php session alapú bejelentkezés folyamatát mysql esetén és ennyi. nem értek hozzá, de szerintem ezzel nem is volt ebbe probléma.
    a többi nem ide tartozik, nem értem minek fárasztjátok a népet hülyeségekkel….
    jó hogy nem motorolajokról kezdek el vitázni vazzeg

  15. pesi: a @ azt jelenti hogy nem dob hibát a brózerbe ha mégis hibázik, egyébbként jópofa kezdőknek tökéletes leírás.

  16. Ez ez cinkes nemkem ezt hoztaki sajna segitsetek
    meg azt az mysql milyen a ki terjesztése?
    Köszi

    Warning: session_start() [function.session-start]: open(/tmp/sess_ece88f5b0fe84ed054d63577a52b5a03, O_RDWR) failed: No such file or directory (2) in /index.php on line 2

    Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /index.php:2) in /index.php on line 2

    Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /index.php:2) in /index.php on line 2

    Warning: Cannot modify header information – headers already sent by (output started at /index.php:2) in /index.php on line 6
    Főoldal | Felhasználói adatok
    A MySQL kapcsolódás sikertelen volt. Hiba: Access denied for user ‘root’@’88.151.96.4’ (using password: NO)
    Warning: Unknown: open(/tmp/sess_ece88f5b0fe84ed054d63577a52b5a03, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

    Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

  17. Köszönöm,

    Igaz csak a tutorial-t csináltam meg, és azt nyüstölöm…DE….tökéletesen müxik.
    Config: Apache 2.2.11 + MySQL 5.1.36 + PHP 5.3.0

  18. sziasztok
    Meg kérnélek titeket szépen írjátok le légyszives hogy tudom azt megoldani hogy amikor az user a login résznél rányom a regisztrációra akkor ne ugyan abba az ablakba jelenjen meg a regisztráció ahol a login van.Hanem úgy szeretném hogy a regisztrációra rányom akkor ugyan úgy jelenjen meg mint a login ne pedig egy ablakban jelenjen meg mindkettő.
    Köszönöm szépen előre is.

  19. Na az a helyzet hogy próbálkoztam így megoldani egy return; al

    else
    {
    include (‘register.php’);
    return;
    }

    így jólenne mert így csak a registráció jelenik meg deviszont ezzel az a baj hogy a capthához a nem írok be semmit így ezzel a megoldással akkor is sajna be enged regisztrálni de ha hagyom úgy ezt a részt ahogy volt akkor a captcha amúgy működik de ez így nem elegendő ha ezt hozzá rakom a kódhoz hogy return;
    Legyetek szívesek segíteni mer a kis feleségemnek csinálnám ezt a kis oldalt és jól akarom megcsinálni.Amúgy elég sokmindent megcsináltam már rajta de ez kifogott rajtam gondolom nektek meg ez nem jelent nehézséget.
    Amúgy én köszönöm szépen ezt a logint mert tényleg egyszerű és átláltható még nekem is.

  20. Szisztok
    Legyetek szives már segíteni mert itt a karácsony és akkorra kész akarok lenni vele nem hiszem el hogy nincs itt senki aki erre ne tudná a megoldást és már csak ezen vagyok megakadva és ettől nem tudom tovább építeni a lapot.

  21. Gyuri: holnap segítek esetleg ha tudsz adni valami elérhetőséget úgy könnyebb lenne

  22. gyuri ha jól értelmezem akkor neked ezt a részt kell megkeresned:

    /* Felhasználó ellenőrzése */
    $query = @mysql_query("SELECT * FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    $row = mysql_fetch_array($query);
    @mysql_free_result($query);
    if (!$row['Id'] || $row['Time'] + $timeout &lt; time() || $row[&#039;Host&#039;] != getip())
    {
     include (&#039;login.php&#039;); // Bejelentkező űrlap
    }

    és itt átírni

    include ('login.php'); // Bejelentkező űrlap

    erre:

    if (!isset($_GET['register'])) include ('login.php'); // Bejelentkező űrlap ha nem regisztrálunk éppen
  23. óóó nagyon nagyon szépen köszönöm szuper így ahogy van az egész mostmár hála neked.Kellemes karácsonyt neked is D: .

  24. Üdv,
    Jó kis tutorial, nekem sokat segített.
    Viszont volna egy problémám. Megpróbáltam beépíteni a saját kódomba.

    A következő a szerkezet:
    az index.php-ban szerepel ez a sor:

    3
    4
    5
    
    if (isset($_POST['login'])){
    	include("users/login.php");
    }

    Tehát, ha login-t postolok include-li a login.php-t.

    A login.php-ban pedig:

    8
    9
    10
    11
    12
    13
    14
    15
    
       $query = mysql_query("SELECT * FROM users WHERE (account='".$nick."' AND password='".$pass."')");
    	$user = mysql_fetch_array($query);
    	if (mysql_num_rows($query) !== 0)
    	  { //Helyes nick+pass
    		@mysql_query("DELETE FROM `sessions` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    		@mysql_query("INSERT INTO `sessions` (`Uid`, `Session_id`, `Host`, `Time`) VALUES ('".$user['id']."', '".mysql_real_escape_string(session_id())."', '".getip()."', '".time()."')");
          header("Location: ".$_SERVER['PHP_SELF']."?page");
        }

    Tehát itt ha van ilyen pass-al és acc-al rendelkező regisztráltam, akkor frissíti a sessions tábla megadott sorát. Eddig ok. Az adatbázisban meg is jelenik.

    A login.php végül visszaküld a főoldalra. (index.php) ahol egy eljárással ellenőrzöm, a felhasználót:

    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    function session_check(){
    $query = @mysql_query("SELECT * FROM `sessions` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    $row = mysql_fetch_array($query);
    @mysql_free_result($query);
    if (!$row['Id'] || $row['Time'] + $timeout &lt; time() || $row[&#039;Host&#039;] != getip())
    {
    	return false; // Ha nincs ilyen sor, vagy lejárt a login idő, vagy ha a Host nem egyezik az IP-vel False-t ad vissza
    }
    else
    {
    	return true;
    }
    }
    2
    3
    
    if(session_check()) { /*Védett tartalom*/ }
    else {/*nem védett tartalom*/}

    A problémám pedig az, hogy amikor visszaküld a login, akkor megjelenik a védett tartalom, de ha frissítek, vagy egy menüpontra kattintok akkor már eltűnik.
    Mi lehet a gond?

  25. session_check függvény helyett, ha sikeres a bejelentkezés, akkor történjen ez:

    1
    
    $_SESSION['login'] = TRUE;

    Majd ezt hívd le egy

    1
    2
    3
    4
    
    if($_SESSION['login']) {
    /*ide jön a kód*/ } else{ /* egyébként meg...*/}
     
    Ha kell kilépés, akkor meg: <pre lang="php" line="1">if(isset($_POST['logout'])){$_SESSION = array();}

    (nálam logout a kilépés gomb neve).

  26. Bocs, nem záródott be a kódrészlet végét jelszó pre tag. Szóval:

    Ha csak ez a baj, akkor csak bejelentkzéskor ellenőrizze le a session kódot, utána csinálja a

    1
    
    $_SESSION['login'] = TRUE;

    műveletet.

    Ezután ez kell:

    1
    2
    
    if($_SESSION['login']) {
    /*ide jön a kód*/ } else{ /* egyébként meg...*/}

    Ha szeretnél kijelentkezés gombot, akkor logout name-t adj a gombnak, postban legyes és ez működni fog:

    1
    
    if(isset($_POST['logout'])){$_SESSION = array();}

    Rövid magyarázat: a $ _SESSION (szóköz nélkül, csak ezt már tényleg nem akarom pre tagok közé tenni) az vmi cookie-szerűség, csak épp csak 1 munkamenet erejéig él.

    Esetleg csinálhatsz egy checkboxot, ahol beállítható, hogy ehelyett cookie-t mentsen, akkor mindkét fajtát lekérdezed, arra keress rá. (talán w3schools ad rá leírást)

    Bocs a dupla kommentért, de az előző lényegében törölhető, csak hibás.

  27. így ránézésre nem látom a hibát, de egy-két ötlet

    próbáld meg az összes mysql_query elől kivenni a @ jelet, hátha valami warningot vagy nagyobb hibát kidob

    a session_check-ben var_dump() -old a $row és a $timeout változókat

    a probléma szempontjából nem lényeges, de a $nick és a $pass az escape-lve vannak?

  28. Sziasztok lenne egy utolsó nagy kérésem mert nem boldogulok azóta vele éshát eléggé fontos lenne ez nekem van a regisztráció regisztrálok és utána vissza is dob szépen a login részre de regisztrálás után nem írja ki ezt a két dolgot
    echo “Regisztráltál!”;
    echo “Mostmár bejelentkezhetsz!”;

    itt van az a rész lehet hogy elrontottam valamit de nem jövök rá azóta amióta összeraktam a lapot.Előre is nagyon szépen köszönöm aki segít.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    else
     {
      @mysql_query("INSERT INTO `Users_login` (`Username`, `Password`, `Email`) VALUES ('".mysql_real_escape_string($_POST['Reg_username'])."', '".sha1(md5($_POST['Reg_password']))."', '".mysql_real_escape_string($_POST['Reg_email'])."')");
      echo "Regisztráltál!";
      echo "Mostmár bejelentkezhetsz!";
      include ('login.php'); // Bejelentkezo urlap
     }
    }
    else
    {
     include ('register.php');
    }
    }
    ###
    /* Felhasználó ellenorzése */
    $query = @mysql_query("SELECT * FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    $row = mysql_fetch_array($query);
    @mysql_free_result($query);
    if (!$row['Id'] || $row['Time'] + $timeout &lt; time() || $row[&#039;Host&#039;] != getip())
    {
     if (!isset($_GET[&#039;register&#039;])) include (&#039;login.php&#039;); // Bejelentkezo urlap ha nem regisztrálunk éppen
    }
    else
    {
     if (!empty($oldalak[$_GET[&#039;page&#039;]]))
  29. Senki????
    Pedig valamit elnézek az biztos csak ne jövök rá.
    Az nemlehet hogy azért van ez amit beraktam ez helyett

    1
    2
    3
    4
    
     include ('login.php'); // Bejelentkező űrlap
     
    Ezt
    if (!isset($_GET['register'])) include ('login.php'); // Bejelentkező űrlap ha nem regisztrálunk éppen

    hogy ezen ugrik át ez a folyamat?

  30. Szerintem nagyon jó, még én is hasznát tudtam venni (pedig nem értek sem a mysql-hez,sem a session-hoz, és a php-ből is csak az alapokat tudom).
    Én raktam hozzá egy csomó dolgot hozzászólások, napszaknak megfelelő köszöntés, stb.

    A problémám az, hogy nem tudom hogy-hogy lehetne megoldani azt, hogy a felhasználó megváltoztathassa az adatait vagy akár törölhesse magát.

    Ha valaki tudja hogy kell, vagy már csinálta is elküldhetné nekem.

  31. Nekem így működik:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    {
      @mysql_query("INSERT INTO `Users_login` (`Username`, `Password`, `Email`, `Fullname`) VALUES ('".mysql_real_escape_string($_POST['Reg_username'])."', '".sha1(md5($_POST['Reg_password']))."', '".mysql_real_escape_string($_POST['Reg_email'])."', '".mysql_real_escape_string($_POST['Reg_fullname'])."')");
      echo "Regisztráltál! Most már bejelentkezhetsz!";
      include ('login.php');
     }
    }
    else
    {
     include ('register.php');
    }
    }
    ###
    /* Felhasználó ellenőrzése */
    $query = @mysql_query("SELECT * FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    $row = mysql_fetch_array($query);
    @mysql_free_result($query);
    if (!$row['Id'] || $row['Time'] + $timeout &lt; time() || $row[&#039;Host&#039;] != getip())
    {
    if (!isset($_GET[&#039;register&#039;])) include (&#039;login.php&#039;); // Bejelentkező űrlap ha nem regisztrálunk éppen
    }
    else
    {
     if (!empty($oldalak[$_GET[&#039;page&#039;]]))
     {
  32. Sajnos én se értek még annyira hozzá hogy segítsek neked ebben de ha megfogadsz egy tanácsot a törlést ne bízd a felhasználóra inkább kösd idő eltelte utáni törléshez hogy pl 90 napja nem lépett be és törli a rendszer autón.De az ötleted nem rossz

  33. Nekem az lenne a kérdésem, hogy amikor van az a rész hogy:

    DROP TABLE …..

    azt milyen néven kellene elmenteni? és nekem miért nem engedi az uw.hu hogy létrehozzak táblát? elméletileg működik ott az sql, mert már hoztam létre másik táblát. előre is köszi

  34. Joska DROP TABLE részt nem kell megnevezned csak annyi a dolgod hogy phpmyadmin -ba bemész ott van felül jobb oldalt a menük között hogy SQL arra ráklikkelsz és oda az egész DROP TABLE részt beilleszted és le okézod és beteszi mind a két táblát a saját nevén.
    Az meghogy az uw-n miért nem tudsz behelyezni táblát az fura egy kicsit de tudomásom szerint lehetséges.

  35. Segitséééééég már valaki nem hiszem el hogy nem tudja valaki a választ az én problémámra.

  36. Srácok nagyon nagyon szépen kérlek titeket valaki segítsen már rajtam az én bajomon mertmár élesíteni kéne kis feleségem oldalát és amíg ezzel nem vagyok kész nem akarom nyitni az oldalát.
    Hálás köszönet annak aki segít előre is.

  37. gyuri: valahol on-line meg lehet nézni az oldalt? Mert így ránézésre jónak tűnik a kód. Nem lehet, hogy a kijövő html-ben ott van a szöveg, csak valahogy az elrendezés miatt nem / nem ott jelenik meg, ahol kéne neki?

    BlackY

  38. Szia hát sajnos még csak localhoston van fent mert addig amíg nem vagyok ezen túl nem igazán akarok addig trükközni serveren nincs is értelme.
    De amit fentebb írtam hogy addig amíg ezt nem cseréltem le addig jól írt ki mindent.
    Tehát
    Ezt ceréltem le az eredetit

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    else
     {
      @mysql_query("INSERT INTO `Users_login` (`Username`, `Password`, `Email`, `Fullname`) VALUES ('".mysql_real_escape_string($_POST['Reg_username'])."', '".sha1(md5($_POST['Reg_password']))."', '".mysql_real_escape_string($_POST['Reg_email'])."', '".mysql_real_escape_string($_POST['Reg_fullname'])."')");
      echo "Regisztráltál!";
     }
    }
    else
    {
     include ('register.php');
    }
    }
    ###
    /* Felhasználó ellenőrzése */
    $query = @mysql_query("SELECT * FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    $row = mysql_fetch_array($query);
    @mysql_free_result($query);
    if (!$row['Id'] || $row['Time'] + $timeout &lt; time() || $row[&#039;Host&#039;] != getip())
    {
     include (&#039;login.php&#039;); // Bejelentkező űrlap
    }

    Erre cseréltem le

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    else
     {
      @mysql_query("INSERT INTO `Users_login` (`Username`, `Password`, `Email`, `Host`) VALUES ('".mysql_real_escape_string($_POST['Reg_username'])."', '".sha1(md5($_POST['Reg_password']))."', '".mysql_real_escape_string($_POST['Reg_email'])."', '".gethostbyaddr($_SERVER['REMOTE_ADDR'])."')");
      echo "Regisztráltál!";
      echo "Mostmár bejelentkezhetsz!";
      include ('login.php'); // Bejelentkezo urlap
     }
    }
    else
    {
     include ('register.php');
    }
    }
    ###
    /* Felhasználó ellenorzése */
    $query = @mysql_query("SELECT * FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    $row = mysql_fetch_assoc($query);
    @mysql_free_result($query);
    if (!$row['Id'] || $row['Time'] + $timeout &lt; time() || $row[&#039;Host&#039;] != getip())
    {
     if (!isset($_GET[&#039;register&#039;])) include (&#039;login.php&#039;); // Bejelentkezo urlap ha nem regisztrálunk éppen
    }

    De ha vissza rakom az eredetit szépen kiírja hogy Regisztráltál!

  39. Bocsánat most néztem meg újra ha visszarakom az eredetit ezt a kódrészt mostmár így se írja ki regisztráció után hogy Regisztráltál! szöveget.
    Ezt már nemértem már nagyon el vesztettem a fonalat hogy hol a baj.

  40. $query = @mysql_query("SELECT * FROM `Users_login` WHERE `Username` = '".mysql_real_escape_string($_POST['Reg_username'])."'");
     $row = mysql_fetch_array($query);
     @mysql_free_result($query);
     if (!empty($row['Id']))
    

    helyett

    1
    2
    3
    4
    
    $query = @mysql_query("SELECT count(*) as count FROM `Users_login` WHERE `Username` = '".mysql_real_escape_string($_POST['Reg_username'])."'");
     $row = mysql_fetch_array($query);
     @mysql_free_result($query);
     if($row['count'])

    mit csinál?
    Amúgy próbáld ki azt, hogy minden ágba teszel valami kiírt szöveget (pl.: echo ‘1’;, echo ‘2’; stb.) és úgy látod, hogy merre halad a kód.

    BlackY

  41. Szia BlackY nagyon rendes tőled hogy segítesz de már nagyon belegabajodtam az egészbe és már nem merek belepiszkálni már annyi mindent át írtam meg át alakítottam már félek hogy mégjobban el cseszem eddig is örültem hogy eljutottam.
    Meg kérnélek inkább hogy be teszem ide a kódot és nézd már át hogy hol rontottam el mert amit írtál azt is kipróbáltam de semmi változás nem volt.
    1000 köszönet és hála érte.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    
     'contact.php',
    'foo' =&gt; 'bar.php',
    'lipsum' =&gt; 'loremipsumdolorsitamet.php',
    '' =&gt; 'fooldal.php', // ha nincs megadva, hogy melyik oldal kell, akkor a fooldal.php legyen
    'chat' =&gt; 'uzenofal.php',
    'forum' =&gt; 'forum.php',
    );
    ###
    include('getip.php');
    ###
    /* MySQL Kapcsolódás */
    $connection = @mysql_connect($mysql_host, $mysql_user, $mysql_pass); // MySQL kapcsolódási próba
    if (!$connection) die('A MySQL kapcsolódás sikertelen volt. Hiba: '.mysql_error());
    $database = @mysql_select_db($mysql_data, $connection); // Adatbázis kiválasztása
    if (!$database) die('Az adatbázis kiválasztása sikertelen volt. Hiba: '.mysql_error());
    ###
    /* Nézzük meg, hogy nem-e akarunk épp bejelentkezni */
    if (isset($_POST['Username']) &amp;&amp; isset($_POST['Password']))
    {
     $query = @mysql_query("SELECT * FROM `Users_login` WHERE `Username` = '".mysql_real_escape_string($_POST['Username'])."' AND `Password` = '".sha1(md5($_POST['Password']))."'");
     $row = mysql_fetch_assoc($query);
     @mysql_free_result($query);
     if (!empty($row['Id']))
     {
      @mysql_query("DELETE FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
      @mysql_query("INSERT INTO `Users_session` (`Uid`, `Session_id`, `Host`, `Time`) VALUES ('".$row['Id']."', '".mysql_real_escape_string(session_id())."', '".getip()."', '".time()."')");
     }
     else
     {
      echo "Rossz felhasználónév vagy jelszó.";
     }
    }
    ###
    if (isset($_GET['logout']))
    {
     @mysql_query("DELETE FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    }
    ###
    /* Nézzük meg, hogy nem-e akarunk épp regisztrálni */
    if (isset($_GET['register']))
    {
    if (isset($_POST['Reg_username']) &amp;&amp; isset($_POST['Reg_password']) &amp;&amp; isset($_POST['Reg_email']))
    {
    ////////////////////////////////////////////////////// E-mail cím ellenorzése hogy igazi e
    if (isset($_POST['Reg_email']) &amp;&amp; !empty($_POST['Reg_email'])) {
            if (strpos($_POST['Reg_email'], '@') === FALSE) return false;
            list($user,$domain) = split('@',urldecode($_POST['Reg_email']));
            echo checkdnsrr($domain, "MX");
    } else {
            echo "Rossz Email cím!";
    }
    //////////////////////////////////////////////////////
    //////////////////////////////////////////////////////Felhasználónév ellenőrzése hogy van e
     $query = @mysql_query("SELECT * FROM `Users_login` WHERE `Username` = '".mysql_real_escape_string($_POST['Reg_username'])."'");
     $row = mysql_fetch_assoc($query);
     @mysql_free_result($query);
     if (!empty($row['Id']))
     {
      echo "Már regisztrált név.";
     }
    //////////////////////////////////////////////////////
    //////////////////////////////////////////////////////Felhasználó email cím ellenorzése hogy van e
     $query = @mysql_query("SELECT * FROM `Users_login` WHERE `Email` = '".mysql_real_escape_string($_POST['Reg_email'])."'");
     $row = mysql_fetch_assoc($query);
     @mysql_free_result($query);
     if (!empty($row['Id']))
     {
      echo "Már regisztrált Email cím.";
     }
    //////////////////////////////////////////////////////
     else
     {
      @mysql_query("INSERT INTO `Users_login` (`Username`, `Password`, `Email`, `Host`) VALUES ('".mysql_real_escape_string($_POST['Reg_username'])."', '".sha1(md5($_POST['Reg_password']))."', '".mysql_real_escape_string($_POST['Reg_email'])."', '".gethostbyaddr($_SERVER['REMOTE_ADDR'])."')");
      echo "Regisztráltál!";
      echo "Mostmár bejelentkezhetsz!";
      include ('login.php'); // Bejelentkezo urlap
     }
    }
    else
    {
     include ('register.php');
    }
    }
    ###
    /* Felhasználó ellenorzése */
    $query = @mysql_query("SELECT * FROM `Users_session` WHERE `Session_id` = '".mysql_real_escape_string(session_id())."'");
    $row = mysql_fetch_assoc($query);
    @mysql_free_result($query);
    if (!$row['Id'] || $row['Time'] + $timeout  $v)
       {
        $user[$n] = htmlspecialchars(stripslashes($v));
       }
       unset($old_user);
       include ($oldalak[$_GET['page']]);
       echo "Üdvözöllek &nbsp;(".$user['Username'].")&nbsp;n";
       echo "Üzenőfal&nbsp;";
       echo "Fórum&nbsp;";
       echo "Kijelentkezés&nbsp;";
     
      }
     }
     else
     {
      echo "Az oldal nem található.";
     }
     
     
    }
    ob_end_flush();
    ?&gt;
  42. Hát nem boldogulok vele inkább megoldottam egy átírányítós scriptel.
    De nagyon sajnálom hogy nem tudtam vissza nyerni az egyszerűségét.
    Ja BlackY amint mondtam próbáltam echo és print -el is sőt die hiba üzivel is de semmit nem írt ki csak simán vissza dobott a login részre.

  43. Sziasztok!
    Nekem az egész nem akar működni, mert nem tudom megépíteni az oldal index.php állományát, mert ha az itt írt index.php-be építem, akkor a login formot össze vissza rakja ki az oldalra, nem tudom pozicionálni, ha pedig külön index.php, és iframe taggel linkelem rá a login/index.php-t, akkor egyátalán nem fog működni, hogy az oldalszerkezet egészére hatással legyen az adott iframeben történő változás.

    Kérlek benneteket segítsetek, hogy meg tudjam építeni ezzel a bejelentkező rendszert.
    Előre is köszönöm!

    További szép napot!

  44. Szia Tzol.
    Akkor kezdjük az elején megpróbálok segíteni mint kezdő a kezdőnek.
    Nekem nem volt össze vissza semmi főleg az index nem de csak sejtem hogy mi a baj nálad css fájlt készítettél már?Mert abba fogjuk pozícionálni a formokat.Nem igazán értem miért akarsz iframet alkalmazni szerintem most egyenlőre hanyagoljuk így egyszerűbb lesz aztán majd ha kész vagy ráérsz iframekat alkalmazni.

  45. Szia Gyuri!

    Nem egyátalán nem sikerült, de ha benne vagy, akkor megadom a publikus skype nevem, és ott meg tudjuk vitatni, hogy hogyan lenne a legegyszerűbb összeállítani, mert konkrétan én nem értem még most sem, hogy ezen a forráskódon (index.php), milyen neveken kell a css-ben pozicionálni?

  46. Szia Gyuri!

    a skype nevem: zoleyandre
    Kérlek vegyél fel, és ott tudunk beszélgetni a témáról!

  47. Kedves hozzászólók!
    Azt szeretném kérdezni, hogy valaki leírná-e nekem, hogy hogy kell azt megoldani, hogy ha nem vagyok bejelentkezve és úgy kattintok a Főoldal menüpontra, akkor írja ki, hogy még nem vagyok bejelentkezve.
    Köszönöm a segítséget!

  48. Sziasztok!

    Ezt a hibát kapom, amikor bejelentkezek:
    Notice: Undefined index: HTTP_CLIENT_IP in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\getip.php on line 3
    Notice: Undefined index: HTTP_X_FORWARDED_FOR in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\getip.php on line 6
    Notice: Undefined index: HTTP_PC_REMOTE_ADDR in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\getip.php on line 11
    Notice: Undefined index: HTTP_X_FORWARDED in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\getip.php on line 13
    Notice: Undefined index: HTTP_FORWARDED_FOR in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\getip.php on line 15
    Notice: Undefined index: HTTP_FORWARDED in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\getip.php on line 17
    Notice: Undefined index: page in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\index.php on line 93
    Notice: Undefined index: page in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\index.php on line 95
    Notice: Undefined index: page in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\index.php on line 111

    A getip helye: db/getip.php

    A ráhivatkozásnál is meg van adva, hogy a db mappában van, de sajnos ezt kapom meg. Ha jól értem, akkor nem ismeri fel az indexeket a file-ban. Ezt hogy tudnám kiküszöbölni?
    Előre is köszönöm!

    További szép estét!

  49. Szia!

    A validip($_SERVER[*]) kifejezéseket mindehol cseréld le (isset($_SERVER[*]) AND validip($_SERVER[*])) és jó lesz.

    BlackY

  50. Köszönöm! így sikerült, de még mindig van 3 hibaüzenetem.

    Notice: Undefined index: page in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\index.php on line 93
    Notice: Undefined index: page in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\index.php on line 95
    Notice: Undefined index: page in C:\Program Files\EasyPHP-5.3.8.0\www\Rallyeman\index.php on line 111

  51. Köszönöm BlackY, csak még így is van 1 hibasor.

    Notice: Undefined index: HTTP_X_FORWARDED_FOR in C:\Program Files\EasyPHP-5.3.8.0\www\teszt\getip.php on line 6

    1
    2
    3
    4
    5
    
    foreach (explode(",",$_SERVER["HTTP_X_FORWARDED_FOR"]) as $ip) {
           if (validip(trim($ip))) {
               return $ip;
           }
       }

    Ez adja a hibát. csak nem tudom kijavítani.

    előre is köszönöm, ha ismét segítesz.

  52. Itt az egészet tedd egy if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])) { }-ba (tehát if { foreach { if { return } } })

    BlackY

  53. Jó a leírás, de a legnagyobb problémám az,hogy includolja a regisztrációs részt is. Ami pl. az én esetemben mivel a függőleges menüsáv alatt lenne elég khm. kakán néz ki pláne ha még bekérek pár adatot. Készítettem egy komplett regisztrációs oldalt ahol középen kéri be az adatokat. Viszont így az egészet át kell írni… copás :(

  54. Sziasztok. Én is kezdő szinten állok, de nagyon.
    És elkeztem csinálgatni egy weboldalt, vagy 60 féle login rendszert próbáltam már de semmi nem működik. Nos én is követtem mindent, és nekem is egy(java123nevü user) problémája van:
    Hibakód:
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\wamp\www\belepteto\index.php on l
    aztán rányomok a bejelntkezésre és ezt a hiba üzit kapom két sorban is:

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\wamp\www\belepteto\index.php on line 37

    a kódok megegyeznek azokkal amik itt vannak, ötlet?, vagy esetleg kaphatnék egy tényleg egyszerű vagy sütis vagy sessionos logint valakitől? regisztrációm már van szóval sql táblából kéne ki olvasni az adatokat, olyan kéne
    Tud valaki segíteni?

  55. Hát csaba pont nekem is ez volt a problémám amit ki is küszöböltünk valaki itt meg adta a helyes kódot csak én ott akadtam meg hogy amikor regisztrál valaki nem írja ki még mindig hogy regisztrált mai napig nem kaptam rá választ én se pedig tuti nem nagy dolog csak én se veszem észre hogy hol nem jó a kód.

  56. Igazán nem akarok gyökér lenni, de….
    Ha már oktatóanyagról van szó, és az a neve, hogy “MySQL + Session alapú bejelentkezés – részletesen” akkor miért nem részletes egyáltalán.

    Nem derül ki semmi a mysql-ről, hogy mit miért csinálunk. Milyen mysql értékek vannak, miért éppen azt a típusú táblát használja, stb.

    Arról nem is beszélve, hogy a regisztráció ami tele van olyan dolgokkal, amit egy amatőr kezébe nem adnék. (Bár írod , hogy némi kivánnivalót…) Pl regisztráció működik üresen hagyott cellákra. Létre is hozza az üres rekordot. A nevet lekérdezi, de az emailcímet nem is ellenőrzi regexpel, hogy egyáltalán az amilcím-e.

    Autómatikus kilépés sincsen benne, ha már a munkamenet kezelésnél tartunk, nem ártana azt valamikor be is fejezni.

    Ráadásul a cikk nem említi meg, hogy a session kezelés akkora biztonsági rés tud lenni, ha rosszul csinálják, hogy az oldal teljesen “nyílt lesz”.

    Erről vannak nagyon jó cikek a neten, tudom, de nem árt felhívni a figyelmet legalább.

  57. Szia smile_221 igazad van és eggyet is értek veled de nem mindenbe.
    Az automata kilépés az itt van
    $timeout = 3600; // Hány másodperc inaktivítás után legyen logout
    Az email részt azt én is magam csináltam már meg hozzá s pedig így
    ////////////////////////////////////////////////////// E-mail cím ellenorzése hogy igazi e
    if (isset($_POST[‘Reg_email’]) && !empty($_POST[‘Reg_email’])) {
    if (strpos($_POST[‘Reg_email’], ‘@’) === FALSE) return false;
    list($user,$domain) = split(‘@’,urldecode($_POST[‘Reg_email’]));
    echo checkdnsrr($domain, “MX”);
    } else {
    echo “Rossz Email cím!”;
    }
    //////////////////////////////////////////////////////
    //////////////////////////////////////////////////////Felhasználó email cím ellenorzése hogy van e
    $query = @mysql_query(“SELECT * FROM `users_login` WHERE `Email` = ‘”.mysql_real_escape_string($_POST[‘Reg_email’]).”‘”);
    $row = mysql_fetch_assoc($query);
    @mysql_free_result($query);
    if (!empty($row[‘Id’]))
    {
    echo “Már regisztrált Email cím.”;
    }
    //////////////////////////////////////////////////////

    Viszont hamár ezt a sessiont írtad hogy elég bátor dolog így használni akkor ezt ki is beszélhetnétek legalább mi kezdők is tudnánk ezekről.
    Én speciel erre építettem az egész oldalamat vagyis drága feleségemé és én nagyon megörültem ennek a tömör és egyszerű megoldásnak és én hálás is vagyok a szerzőének.
    Békés boldog gazdag Karácsonyt mindenkinek.
    És használjátok egészséggel amit beraktam megoldást is.

  58. Sziasztok valaki tudna segíteni hogy ez mire jó?

    /* Az oldalakat deklaráljuk */
    $oldalak = array(
    ‘kapcsolat’ => ‘contact.php’,
    ‘foo’ => ‘bar.php’,
    ‘lipsum’ => ‘loremipsumdolorsitamet.php’,=> ‘fooldal.php’, // ha nincs megadva, hogy melyik oldal kell, akkor a fooldal.php legyen
    ‘details’ => ‘adatok.php’,
    );
    ###

    illetve ez a rész mert fogalmam sincs. A bejelentkezésnek az értelme az lenne hogy hozzáférjünk bizonyos fünkciókoz ha belépünk.

  59. Sziasztok

    Kezdő Html és Php tudással neki szeretnék állni weboldalak tervezéséhez,kivitelezéséhez a kérdésem a következő lenne:
    Hol találok olyan tutoriált leirást ahol részletesen le van írva egy weboldal alap lépései?
    Most per pill. egy bejelentkezési form-nál ragadtam le,megcsináltam ami ide le van irva de nekem data bázis hibánál le is ragadt :(
    Elképzelésem egy olyan oldalt akarok létrehozni ahol az index.php egy bejelentkezéssel és regisztrációval kezd és csak utána tölti be maga az óra tartalmát!
    Ezt hogyan tudnám megvalósíttani?

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

  60. Sziasztok!
    nagyon ott van a kód de van egy prbléma amit észrevettem és nem tudom hogy hogyan javítsam. a probléma az hogy ha a felhasználó bejelentkezik akkor ugye au urlben az index.php kapja meg azonban itt nincs még megadva paga (index.php?page) és ezért ezt a problémát írja Undefined index: page

    a hozzászólásokban kétszer is találtam ugyan azt a hozzászólást azonban megoldás nem érkezett.

    előre is köszönöm a választ

  61. Hú derég voltam itt alig találtam meg a weben!
    Doup
    A válasz neked az a fájl amiben van ez a kód részlet az bölcső alá veszi az összes ottlévő php fájlt tehát ha mondjuk beírod a böngésző sávba (http://valami.hu/index.php?kapcsolat akkor betölti a (contact.php)-fájlt.
    És ha valami kódot beleraksz a contact.php fájlodba akkor az meg is jelenik az index.php oldaladon.

    zsolt sajnos igen de ha valaki végig olvassa a topikot akkor rájön hogy azt ki kell venni.

  62. Sziasztok!
    Valamit elkeverhettem, mert ha user kijelentkezés nélkül bezárja a böngészőt, valamelyik page= lapról, akkor session bentmarad a táblában.
    próbáltam window.onbeforeunload -al, de nem jött be, mert gyakran frissítek és arra is reagál. Tud segíteni valaki merre keressem?

  63. Szia!
    Attila a session az idő letelte után leptet ki automatikusan pl 5 perc inaktivitás után logoutot hajt végre de ha 5 percen belül lépsz vissza a lapra akkor újra elkezdi számolni az 5 perces logoutot

  64. Hali! Az hogyan oldaható meg, hogy mikor a user belép és újratölti az oldalt, akkor ne a bejelentkező részt mutassa?

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét