Session - Projekt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Session - Projekt

    Da Sessions ne wichtige Sache sind, schlage ich vor gemeinsam einige Grundsätze zu klären. ich hab selbst nicht die riesenahnung, aber schon mal einen ersten vorschlag, wie ich mir eine session.php vorstelle. ich hoffe es ist so weit verständlich. ich BITTE natürlich darum-sicherheitsprobleme und fehler zu melden.

    PHP-Code:
    <?
    function connect($database="datenbank-name"){
            $db=mysql_connect("rechner-name-oder-ip","user-name","user-passwort");
            if (! mysql_select_db("$database")){
                    $db="";
                    print ("<p><b><center>Keine Verbindung zur Datenbank. Please contact the Administrator</b></center>");
                    exit();
            }
            return ($db);
    }
    //----------------------------------------------------------------------------------
    // check session, wenn lange nix getan-dann löschen
    //----------------------------------------------------------------------------------
    function checkSession($db){
            $expirationtime=time()-1200; //  logout nach 20 minuten, wenn nix gemacht wurde (20mins)
            $query = "SELECT * From sessions_tb WHERE Time < '$expirationtime'";
            $result=mysql_query($query,$db);
            while($row=mysql_fetch_row($result)){
                    $session=$row[0];
                    $userid=$row[1];
                    $login=$row[2];
                    deleteSession($db,$session);
                    writeLog($db,$userid,$login,"2"); //log level 2 - timeout
                    header("Location:clear.php");
            }
            return;
    }
    //----------------------------------------------------------------------------------
    // Update session time
    //----------------------------------------------------------------------------------
    function updateSession($db,$session){
            checkSession($db);
            $query="SELECT * FROM sessions_tb WHERE Session='$session'";
            $result=mysql_query($query,$db);
            $row=mysql_fetch_row($result);
            if ($row[0]){
                    $userid=$row[1];
                    $login=$row[2];
                    $seclevel=$row[3];
                    $time=time();
                    $query="UPDATE sessions_tb SET Time = $time WHERE session = $session";
                    mysql_query($query,$db);
            }else{
                    $session=false;
            }
            return $session;
    }
    //----------------------------------------------------------------------------------
    // User Login. Wenn er schon ne session hat, dann alle session Löschen---wegen der sicherheit.
    //----------------------------------------------------------------------------------
    function login($db,$passedusername,$passedpassword){
            checkSession($db);
            $query="SELECT * FROM users_tb WHERE login = '$passedusername'";
            $result=mysql_query($query,$db);
            $row=mysql_fetch_row($result);
            if ($row[0]){
                    $userid=$row[0];   //  $row[xxx] xxx-ist natürlich abhängig wie eure users-tabelle aussieht
                    $login=$row[1];
                    $passwd=$row[2];
                    $seclevel=$row[3];
                    if($passwd==$passedpassword AND $seclevel>0){
                            $session=checkUser($db,$userid); //check ob schon eingeloggt
                            if ($session){
                                    deleteSession($db,$session); //user rausschmeissen-wenn erschon drin is
                                    writeLog($db,$userid,$login,'4');
                                    header("Location:ar_login.php");
                                    exit();
                            }else{
                                    writeLog($db,$userid,$login,'1');
                                    $session=setSession($db,$login,$userid,$seclevel);
                            }
                    }else{
                            $session=false;
                    }

            }else{
                    $session=false;
            }
            return $session;
    }
    //----------------------------------------------------------------------------------
    // Session erzeugen und in die session-tabelle schreiben
    //----------------------------------------------------------------------------------
    function setSession($db,$login,$userid,$seclevel){
            $time=time();
            $length=8;// Länge der session
            $session="";
            mt_srand(time());
            $sessionstring="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            $achar=strlen($sessionstring)-1;
            for ($i=0;$i<$length;$i++){
                    $session.=$sessionstring[mt_rand(0,$achar)];
            }
            $query = "INSERT INTO sessions_tb (Session,UserID,UserName,Time,AccessPermitted) VALUES ('$session',$userid,'$login','$time',$seclevel)";
            mysql_query($query,$db);
            return $session;
    }
    //----------------------------------------------------------------------------------
    // Delete die session und return.
    //----------------------------------------------------------------------------------
    function deleteSession($db,$session){
            $query="DELETE FROM sessions_tb WHERE session = '$session'";
            mysql_query($query,$db);
            return;
    }
    //----------------------------------------------------------------------------------
    // Check access-Level---definiert sind Löschen, nur lesen, Lesen und Schreiben....
    //----------------------------------------------------------------------------------
    function checkAccess($db,$session){
            $query="SELECT * FROM sessions_tb WHERE Session = '$session'";
            $result=mysql_query($query,$db);
            $row=mysql_fetch_row($result);
            if ($row[3]){
                    $access=$row[3];
            }else{
                    $access = 0;
            }
            return $access;
    }
    //-----------------------------------------------------------------------------------
    // Check - wenn der User schon drin is, dann false zurückgeben
    //-----------------------------------------------------------------------------------
    function checkUser($db,$userid){
            $query="SELECT * FROM sessions_tb WHERE UserID = $userid";
            $result=mysql_query($query,$db);
            $row=mysql_fetch_row($result);
            if ($row[0]){
                    $session=$row[0];
            }else{
                    $session = false;
            }
            return $session;
    }
    //----------------------------------------------------------------------------------
    // eintrag in die userlog-tabelle
    //----------------------------------------------------------------------------------
    function writeLog($db,$userid,$login,$log){
            switch ($log){
                    case 1:
                            $log="Log-in";
                            break;
                    case 2:
                            $log="Session time-out";
                            break;
                    case 3:
                            $log="Log-out";
                            break;
                    case 4:
                            $log="Dupe Force Out";
                            break;
            }
            $time=time();
            $query="INSERT INTO userlog_tb (UserID,UserName,Time,Log) VALUES ('$userid','$login', $time,'$log')";
            mysql_query($query,$db);
            return;
    }
    //----------------------------------------------------------------------------------
    // Logout wenn ausloggen - dann session löschen - und ein eintrag in die Log-Datei
    //----------------------------------------------------------------------------------
    function logout($db,$session){
            $query="SELECT * FROM sessions_tb WHERE Session = '$session'";
            $result=mysql_query($query,$db);
            $row=mysql_fetch_row($result);
            if ($row[1]){
                    $userid=$row[1];
                    $login=$row[2];
                    writeLog($db,$userid,$login,"3");
                    deleteSession($db,$session);
            }
            return;
    }
    ?>
    fotos :

    http://www.flickr.com/photos/rassloff/collections/
Lädt...
X