Súgó - Keresés - Tagok - Naptár
Teljes változat: Felhasználó nyomonkövetése mysgl adatbázisban tárolt session-el
PC WORLD Segélyvonal > WEBSAROK > Webszerkesztés, programozás > PHP
Levmaster
Sziasztok!

Szeretnék adatbázisban tárolt session-el csinálni beléptetőrendszert, biztonsági időkorlátos kiléptetéssel. Egy beléptetőrendszert már sikerült írnom, de az csak egy egyszerű cookie-s megoldás volt.
Segítséget szeretnék kérni hogy hogy is kezdjem el... ne kész progikat linkeljetek be légy szíves, hanem inkább csak kis progirészleteket meg leírásokat, mert én szeretném megcsinálni.
Fontos kezdőkérdés:
Milyen mezők szükségesek a mysql adatbázisban? Gondolom valami ilyesmi kell: Session tábla: sessin_id, session_time, timestamp, stb.
Előre is köszi a segítséget!
Mezofi
Legyen modjuk 2 oszlop.
session_id, belepesi_ido
Amikor belép egy kódgeneráló script segítségével adsz neki egy azonosítót, persze elötte megnézed nincs-e már ilyen azonosító a táblában. Aztán ezt és a belépési időt beírod a táblába.
Minden oldal elején megnézed létezik-e a session és a hozzá tartozó idő és az aktuális idő különbsége nem-e több, mint a beállított engedélyezett idő. Ha több akkor törlöd a sessiont a táblából.
Ekkor bármikor lekérdezed a táblát tudni fogod mennyien vannak az oldaladon, stb. Persze teljesen nem lesz pontos.
Levmaster
hmmm.. hát lehet hogy egy kicsit bővebb segítségre lenne szükségem smile.gif
Amikor belép a felhasználó indítok egy session-t. Generálok egy id-t és egy timestamp-el együtt elmentem... hogyan tovább?
Lépésről lépésre: mit csináljak? roll.gif
Mezofi
A session tartalmazni fogja a belépés idejét és a session id-t is. Minden oldalon összehasonlítod az aktuális időt és az eltárolt időt. Ha a különbség egy előre megadott intervallumba esik.

Persze itt jön a kérdés, hogy mire akarod használni a sessiont, hogy megállapítsd mióta van az oldaladon, vagy mire?
Levmaster
Biztonsági időkorlátot akarok, illetve felsorolni az éppen online felhasználókat...
Mezofi
Hát akkor össze hasonlítod amikor belépett és ami a pontos idő. Minden lapon. És beírod a táblába, hogy jelen van. Amikor túl lépte az idő korlátodat törlöd a táblából és törlöd a session-ját is.
Minden oldal megnyításkor átnézeted a táblát, hogy nincs-e időn túli mandarin a táblában, ha van törlöd a bejegyzést.
Levmaster
Van egy ilyen kódom, de ez az ujabb PHP-val nem megy... blink.gif
Van valami ötleted?
KÓD

<?php

session_start();
include("config.php");

class login
{
    function login()
    {
    
        $this->rightlogin = false;
        $this->tried = false;
        $this->username = "";

        if (isset($exit))
            $this->logout();
    }
    
    function logging_in()  
    {
        if (isset($_POST['login']))
        {
            $connection = mysql_connect(DBHOST, DBUSER, DBPASS) or die ("ERROR! Could not connect to MySQL host!");
            mysql_select_db(DBNAME, $connection) or die ("ERROR! Could not open $DBNAME database: ".mysql_error());
            $encrypted_pass = md5($_POST['upass']);
            $result = mysql_query("SELECT username FROM user WHERE pass=$encrypted_pass");
            
            if (mysql_affected_rows() > 0)
            {
                $username = $uname;
                sessin_register("username");

                $this->rightlogin = true;
                $this->tried = true;
                $this->username = $uname;

                $dat = getdate();
                $date = $dat["year"]."-".$dat["mon"]."-".$dat["mday"]." ".$dat["hours"].":".$dat["minutes"].":".$dat["seconds"]; //belépés loggolása
                $order = "INSERT INTO log (login_user, login_time) VALUES ('$uname', '$date')";
                $order2 = "INSERT INTO session (session_id, timestamp) VALUES ('$uname', '$date')";
                $result2 = mysql_query($order) or die("Database ERROR:".mysql_error());
                $result3 = mysql_query($order2) or die("Database ERROR:".mysql_error());
            }

            else
            {
                $this->tried = true;
            }
            $this->tried = true;
        }

        elseif (isset($_SESSION["username"]))
        {
            $this->username = $_SESSION["username"];
            $this->rightlogin = true;
        }

        if (!$this->rightlogin)
        {
            $this->login_sheet();
            exit();
        }
    }
    
    function logout()
    {
        global $PHP_SELF;
        session_unregister("username");
        header("Location: $PHP_SELF");
    }

    function login_sheet()
    {
        global $PHP_SELF;
        ?>
        
        <html>
        <head>
        <style type="text/css">
        <!--
        .style1 {
        color: #003A0A;
        font-family: "Lucida Sans Unicode";
        }
        -->
        </style>
        </head>
        <?= ($this->voltProbalkozas ? "<font color=\"#FF0000\"><p align=\"center\"><b>Invaild username or password!</b></font>": "<font color=\"#003A0A\"><p align=\"center\"><b>Login</b></font>") ?>
        <div align="center" class="style1">
                <table width="40" bgcolor="#6ae0ad">
        <form action="<?=$PHP_SELF?>" method="POST">
        <tr>
        <td>Username:</td>
        <td> <input type="text" name="uname"><br></td>
        </tr>
        <tr>
        <td>Password:</td>
        <td><input type="password" name="upass"><p></td>
        <td><input type="submit" name="uLogin" value="Login"></td>
        </tr>
        </form>
        </table>
        </div>
        </body>
        </html>
        <?php
    }
}
?>
Mezofi
Ez egy idézet tőled:
IDÉZET
mert én szeretném megcsinálni.


Akkor ne más kódjából szemezgess, mert így nem fog menni.
Ez a tartalom egy lebutítottváltozata. A teljes változat képekkel kiegészült megtekintéséhez kérünk, kattints ide.