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! ;)) :)

Kapcsolódó bejegyzések:
  • Na ez egy elég komoly tutorial, php és MySQL kell az elkészítéséhez! Első lépésként csináljunk egy MySQL táblát!CREATE TABLE `shoutbox` ( `id` INT(1 …

  • Ez egy hírküldő script. Működése nagyon egyszerű. Mindössze 3 fájlból áll, és adatbázis alapú a hírek tárolása. A dbconnect.php segítségével kapcsolódik az adat …

  • Ez a tutorial a PHP Tutorial videó sorozatnál feltett kérésre készül. A posztban bemutatott kereső felhasználók között keres, természetesen a logika alapján MYSQ …

  • Ahogy belépek egy magyar nyelvű fórumba ahol webszerkesztés téma is van, olyan nincs, hogy ne találjak olyan kérdést, hogy “Keresés, hogyan?”. Most erre talász i …

  • A gyik.com fórumon elég sokszor felmerült kérdés: hogy lehet login rendszert illeszteni egy honlapba? Íme a feladat egy lehetséges megoldása:tölthető :letöltés / …

A cikket beküldte: balintx (http://www.phoenixchat.hu/)

77 hozzászólás

  1. Csaba says:

    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. balintx says:

    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. balintx says:

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

  4. lightgod says:

    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. Enter says:

    É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. balintx says:

    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. BlackY says:

    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. t4 says:

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

  9. JoeBlack2060 says:

    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. Pit says:

    Sztem minden érthető.. pár perc alatt kivitelezhető…

  11. Zoli says:

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

    Miert?

    A linuxon mint root vagyok bejelentkezve .

    Tisztelettel,
    Zoli B.

  12. compactegon says:

    Hali!
    Nekem sikerült, semmi gáz vele. Viszont hol a contact.php? :D

  13. java123 says:

    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?

  14. balintx says:

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

  15. Zanku says:

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

  16. blx says:

    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

  17. Pesi says:

    Miért van @ néhány mysql parancs előtt?

  18. yasp says:

    Ha @ van előtte, akkor nem írja ki kliens oldalra az esetleges hibákat.

  19. baloh.yosyp says:

    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.

  20. bsh says:

    Nagyonnagyonnagyonzsír! Köszike! Isten vagy. :D

  21. Dezső says:

    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

  22. Agent Zed says:

    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

  23. gyuri says:

    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.

  24. gyuri says:

    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.

  25. gyuri says:

    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.

  26. balintx says:

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

  27. balintx says:

    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
  28. gyuri says:

    óóó 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: .

  29. Iffar says:

    Ü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?

  30. NB. says:

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

  31. NB. says:

    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.

  32. balintx says:

    í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?

  33. gyuri says:

    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;]]))
  34. gyuri says:

    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?

  35. edyzol says:

    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.

  36. edyzol says:

    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;]]))
     {
  37. gyuri says:

    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

  38. gyuri says:

    Ja és amit te beraktál nem sok különbség van közte de így se jó

  39. Joska says:

    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

  40. gyuri says:

    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.

  41. gyuri says:

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

  42. gyuri says:

    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.

  43. BlackY says:

    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

  44. gyuri says:

    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!

  45. gyuri says:

    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.

  46. BlackY says:
    $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

  47. gyuri says:

    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;
  48. gyuri says:

    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.

  49. Tzol says:

    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!

  50. gyuri says:

    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.

  51. Tzol says:

    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?

  52. gyuri says:

    Rendben küld.

  53. Tzol says:

    A honlap helyén megtalálod a skype nevem!

  54. Tzol says:

    A skype nevem: zoleyandre

  55. Tzol says:

    Szia Gyuri!

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

  56. Tzol says:

    bocsi a sok hsz-ért, csak nem írta ki legelőször a hozzászólásomat. :/

  57. Ras says:

    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!

  58. guszti says:

    Valaki meg tudja akkor nekem mondani, hogy hogyan tudok mysql-t csinálni. “Kezdő vagyok”.

  59. Zoli says:

    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!

  60. BlackY says:

    Szia!

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

    BlackY

  61. Zoli says:

    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

  62. Zoli says:

    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.

  63. BlackY says:

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

    BlackY

  64. Csaba says:

    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 :(

  65. Bugu says:

    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?

  66. gyuri says:

    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.

  67. smile_221 says:

    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.

  68. gyuri says:

    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.

  69. Csaba says:

    Ha már valaki komplett biztonsági rendszert keres :) Nem tökéletes de kb. 98%-ig jó :)

    http://www.devshed.com/c/a/PHP/Creating-a-Secure-PHP-Login-Script-59941/
    http://www.php-developer.org/php-secure-authentication-of-user-logins/

    A kettő nagyjából hasonló a második link aszem bővebb.

  70. Doup says:

    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.

  71. Péter says:

    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!

  72. zsolt says:

    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

  73. gyuri says:

    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.

  74. Attila says:

    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?

  75. gyuri says:

    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

  76. Attila says:

    Szia Gyuri!
    Köszönöm, hogy írsz, de pont ez a kérdésem, hogy vajon miért nem.
    Hol tévedhet el?

  77. Delta says:

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

Szólj hozzá
a MySQL + Session alapú bejelentkezés – részletesen c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>