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

Harder

Harder

Profil

Korábbi hozzászólások (77)

A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.

  1. Csaba

    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

    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. lightgodwww.csabitas.hu

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

  4. balintx

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

  5. Enter

    É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

    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

    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

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

  9. JoeBlack2060

    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. Pitwww.bulldogpiknik.hu

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

  11. Zoli

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

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

További 65 hozzászólás-szál megjelenítése
  1. java123

    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?

  2. balintx

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

  3. Zanku

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

  4. blx

    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

  5. Pesi

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

  6. yasp

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

  7. baloh.yosyp

    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.

  8. bsh

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

  9. Dezsőjina.atw.hu

    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

  10. Agent Zed

    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

  11. gyuri

    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.

  12. gyuri

    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.

  13. gyuri

    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.

  14. balintx

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

  15. balintx

    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 < time() || $row['Host'] != getip())
    {
    include ('login.php'); // 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

  16. gyuri

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

  17. Iffar

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

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

    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 < time() || $row['Host'] != 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;
    }
    }

    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?

  18. NB.

    session_check függvény helyett, ha sikeres a bejelentkezés, akkor történjen ez:
    $_SESSION['login'] = TRUE;
    Majd ezt hívd le egy if($_SESSION['login']) {
    /*ide jön a kód*/ } else{ /* egyébként meg...*/}

    Ha kell kilépés, akkor meg: if(isset($_POST['logout'])){$_SESSION = array();} (nálam logout a kilépés gomb neve).

  19. NB.

    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 $_SESSION['login'] = TRUE; műveletet.

    Ezután ez kell:
    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:
    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.

  20. balintx

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

  21. gyuri

    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.

    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 < time() || $row['Host'] != getip())
    {
    if (!isset($_GET['register'])) include ('login.php'); // Bejelentkezo urlap ha nem regisztrálunk éppen
    }
    else
    {
    if (!empty($oldalak[$_GET['page']]))

  22. gyuri

    Senki????
    Pedig valamit elnézek az biztos csak ne jövök rá.
    Az nemlehet hogy azért van ez amit beraktam ez helyett

    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?

  23. edyzol

    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.

  24. edyzol

    Nekem így működik:
    {
    @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 < time() || $row['Host'] != getip())
    {
    if (!isset($_GET['register'])) include ('login.php'); // Bejelentkező űrlap ha nem regisztrálunk éppen
    }
    else
    {
    if (!empty($oldalak[$_GET['page']]))
    {

  25. gyuri

    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

  26. gyuri

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

  27. Joska

    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

  28. gyuri

    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.

  29. gyuri

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

  30. gyuri

    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.

  31. BlackY

    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

  32. gyuri

    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

    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
    }

    Erre cseréltem le

    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 < time() || $row['Host'] != getip())
    {
    if (!isset($_GET['register'])) include ('login.php'); // Bejelentkezo urlap ha nem regisztrálunk éppen
    }

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

  33. gyuri

    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.

  34. BlackY

    $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

    $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

  35. gyuri

    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.

    'contact.php',
    'foo' => 'bar.php',
    'lipsum' => 'loremipsumdolorsitamet.php',
    '' => 'fooldal.php', // ha nincs megadva, hogy melyik oldal kell, akkor a fooldal.php legyen
    'chat' => 'uzenofal.php',
    'forum' => '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']) && 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']) && isset($_POST['Reg_password']) && isset($_POST['Reg_email']))
    {
    ////////////////////////////////////////////////////// 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ó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  (".$user['Username'].") n";
    echo "Üzenőfal ";
    echo "Fórum ";
    echo "Kijelentkezés ";

    }
    }
    else
    {
    echo "Az oldal nem található.";
    }

    }
    ob_end_flush();
    ?>

  36. gyuri

    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.

  37. Tzol

    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!

  38. gyuri

    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.

  39. Tzol

    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?

  40. gyuri

    Rendben küld.

  41. Tzol

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

  42. Tzol

    A skype nevem: zoleyandre

  43. Tzol

    Szia Gyuri!

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

  44. Tzol

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

  45. Ras

    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!

  46. gusztialldownloads.uw.hu/index.html

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

  47. Zolitajtidesign.fw.hu

    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!

  48. BlackY

    Szia!

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

    BlackY

  49. Zolitajtidesign.fw.hu

    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

  50. Zolitajtidesign.fw.hu

    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

    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.

  51. BlackY

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

    BlackY

  52. Csaba

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

  53. Bugurocklife.atw.hu

    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?

  54. gyuri

    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.

  55. smile_221

    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.

  56. gyuri

    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.

  57. Csaba

    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.

  58. Doup

    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. Péter

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

    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. gyuriwww.fozolabor.hu/oldal.izso?

    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. Attilacyberquiz.info

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

    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. Attilacyberquiz.info

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

  65. Delta

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

Van hozzáfűznivalód? Írj nekem közvetlenül.

Kapcsolat