Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
Diskussion

Diskussion: Login-Skript mit Sessions, PHP und MySQL

Ayom-Team
Geschrieben am: Mo 11.08.2008, 02:59
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (aktiv)
Beiträge: 1
Mitglied seit: 17.11.2004


Diskussion zum Artikel Login-Skript mit Sessions, PHP und MySQL in der Kategorie PHP, Mysql & Apache

Diesen Code bitte nicht leichtfertig verwenden, er könnte trotz meiner Korrekturen immer noch Sicherheitsmängel aufweisen.
Dieser Programmcode stammt nicht von mir und wurde auch nicht von mir hier eingestellt, sondern wurde nur aufgrund erheblicher Sicherheitsmängeln von mir modifiziert!


gez. Sascha Ahlers




Viele wüsste gerne wie man ein Login-Skript erstellt. Ich habe hier nun eins.
Das Skript basiert auf Sessions, PHP und MySQL.

Da es nicht den gleichen Username geben darf, aktiviert man die Eigenschaft „UNIQUE“ in der MySQL-Datenbank.

Der SQL Code sieht so aus:
SQL
CODE

CREATE TABLE `users` (
  `UserID` int(11) NOT NULL auto_increment,
  `UserName` varchar(30) collate utf8_unicode_ci NOT NULL default '',
  `UserPass` varchar(32) collate utf8_unicode_ci NOT NULL default '',
  `UserSession` varchar(32) collate utf8_unicode_ci default NULL,
  `UserMail` varchar(150) collate utf8_unicode_ci NOT NULL default '',
  PRIMARY KEY (`UserID`),
  UNIQUE KEY `NickName` (`UserName`),
  UNIQUE KEY `UserMail` (`UserMail`),
  UNIQUE KEY `UserSession` (`UserSession`)
) ENGINE=MyISAM;


Falls man das Passwort vergessen hat, kann man es überschreiben.
Der Username muss angepasst werden und das Passwort kann geändert werden.
Für das Anlegen eines Users muss man diesen Code auch eingeben.

SQL
CODE
INSERT INTO users SET UserName = 'admin', UserPass = MD5('test'), UserMail = 'mrhappiness@inter.net';



login.php
CODE

<?php

session_start();
include_once('sessionhelpers.inc.php');

if ( isset($_POST['login']) ) {
    $userid = check_user($_POST['username'], $_POST['userpass']);
    if ( $userid ) {
        login($userid);
    } else {
        echo '<p>Ihre Anmeldedaten waren nicht korrekt!</p>';
    }
}

if ( !logged_in() ) {
    echo <<<END
<form method="post" action="login.php">
<label>Benutzername:</label> <input name="username" type="text"><br />
<label>Passwort:</label> <input name="userpass" type="password" id="userpass"><br />
<input name="login" type="submit" id="login" value="Einloggen">
</form>
END;
} else {
    echo '<p><a href="soll-geschuetzt-werden.php">Testseite</a></p>';
    echo '<p><a href="logout.php">Ausloggen</a></p>';
}

?>



Auf allen Seiten, die geschützt werden sollen, fügt man den folgenden Code ein.


soll-geschuetzt-werden.php
CODE

<?php

session_start();
include_once('sessionhelpers.inc.php');

echo 'Sie sind ';
if ( !logged_in() ) {
    echo 'nicht ';
}
echo 'eingeloggt.<p />';

if ( !logged_in() ) {
    echo '<p><a href="login.php">Anmelden</a></p>';
}



if ( logged_in() ) {
    echo '<p>Geschützter Bereich</p>';

    echo '<p><a href="logout.php">Ausloggen</a></p>';
}

?>



Nun noch das Ausloggen-Skript.


logout.php
CODE

<?php

session_start();
include_once('sessionhelpers.inc.php');

echo '<p>Sie sind ';
if ( !logged_in() ) {
    echo 'nicht ';
}
echo 'eingeloggt.</p>';

logout();

echo '<p>Sie sind ';
if ( !logged_in() ) {
    echo 'nicht ';
}
echo 'eingeloggt.</p>';

echo '<p><a href="login.php">Einloggen</a></p>';

?>



Den folgenden Code muss man anpassen. Bei mysql_connect muss man den Servername, Benutzer und das Passwort anpassen. In mysql_selcet_db muss man den Datenbankname eingeben.


sessionhelpers.inc.php
CODE

<?php


/**
 * @return void
 */
function connect () {
    $con = mysql_connect('host', 'benutzername', 'passwort') or exit(mysql_error());
    mysql_select_db('datenbank', $con) or exit(mysql_error());
}


/**
 * @param string $name
 * @param string $pass
 * @return boolean
 */
function check_user ( $name, $pass ) {
    // magic quotes anpassen
    if ( get_magic_quotes_gpc() ) {
        $name = stripslashes($name);
        $pass = stripslashes($pass);
    }
    // escapen von \x00, \n, \r, \, ', " und \x1a
    $name = mysql_real_escape_string($name);
    // escapen von % und _
    $name = str_replace('%', '\%', $name);
    $name = str_replace('_', '\_', $name);

    $sql = 'SELECT UserId FROM users WHERE UserName = \'' . $name . '\' AND UserPass=\'' . md5($pass) . '\'';
    if ( !$result = mysql_query($sql) ) {
        exit(mysql_error());
    }
    if ( mysql_num_rows($result) == 1 ) {
        $user = mysql_fetch_assoc($result);
        return ( $user['UserId'] );
    } else {
        return ( false );
    }
}


/**
 * @param int $userid
 * @return void
 */
function login ( $userid ) {
    $sql = 'UPDATE users SET UserSession = \'' . session_id() . '\' WHERE UserId = ' . ((int)$userid);
    if ( !mysql_query($sql) ) {
        exit(mysql_error());
    }
}


/**
 * @return boolean
 */
function logged_in () {
    $sql = 'SELECT UserId FROM users WHERE UserSession = \'' . session_id() . '\'';
    if ( !$result = mysql_query($sql) ) {
        exit(mysql_error());
    }
    return (mysql_num_rows($result) == 1);
}


/**
 * @return void
 */
function logout () {
    $sql = 'UPDATE users SET UserSession = NULL WHERE UserSession = \'' . session_id() . '\'';
    if ( mysql_query($sql) ) {
        exit(mysql_error());
    }
}

connect();

?>


Das Login-Skript stammt von http://www.php-resource.de.



.

-------------------
Dieser Artikel steht unter der Creative Commons Lizenz.
Top
PMEmail Poster
Top
 
 
Chimara
#2 Geschrieben am: Mo 11.08.2008, 03:00 (+00:00)
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 2
Mitglied seit: 11.08.2008


Hallo,

Erstmal vielen dank für das tolle Skript!
Funktioniert Super.

Nur einen kleinen Fehler habe ich gefunden:

Auf der Logout.php ist es nicht möglich sich auszuloggen, bzw. wird nach dem klicken auf "ausloggen" immer "sie sind eingeloggt" angezeigt, und ich bleibe auch eingeloggt.

Gibt es dafür schon eine Korrektur?

Danke schonmal
Top
PMEmail Poster
Top
 
Chimara
#3 Geschrieben am: Mo 11.08.2008, 03:33 (+00:32)
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 2
Mitglied seit: 11.08.2008


Und noch eine Frage hätte ich;)

Ist es möglich jedem einzelnen User eine eigene Startseite zuzuordnen?
D.h. das jeder User nur Zugriff auf eine bestimmte Unterseite bekommt? Sagen wir um bei dem beispiel zu bleiben: admin kommt auf soll-geschuetzt-werden.php, admin2 kommt auf soll-geschuetzt-werden2.php usw., ohne jedoch zugriff auf die anderen seiten zu haben.

Ich poste das hier jetzt auch wenn das u.U. fehl am Platz ist.

Danke schonmal!
Top
PMEmail Poster
Top
7 Monate später...

#4 Geschrieben am: So 15.03.2009, 12:07 (+7m )
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 0
Mitglied seit: --


ey leute ich schieb hier gleich voll die effekte ich sitzt die ganze nacht schon dran und kmm voll nicht klar...
Ich bekomme Probleme mit dem "session_start();" woran kann das liegen??
Top
PMEmail Poster
Top
 
mainlink
Mainlink Internet
#5 Geschrieben am: So 15.03.2009, 17:48 (+05:41)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 307
Mitglied seit: 12.09.2007


Tolle Fehlerbeschreibung und originelle Zeichensetzung .

Ich wette 5 Euro für die Kaffeekasse, das etwas vor session_start(); steht.
Top
PMEmail PosterUsers WebsiteMSN
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/25749

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Diskussion: Counterservice - Gute Counter? Ayom-Team 2597 21 Sa 13.03.2010, 20:14
Dialog per Skript oeffnen und schliessen Sancheck 83 0 Mi 10.03.2010, 12:26
Produktdaten Skript Kabir 99 0 Mo 8.03.2010, 12:33
MySQL Sortierung ist irgendwie komisch! webdoktor 243 13 Fr 5.03.2010, 10:20
MYSQL Update-Befehl auf Basis Erg. SELECT Abfrage? Claus Lehmann 184 4 Mi 3.03.2010, 12:27
Diskussion: Google Pagerank ohne Toolbar anzeigen Ayom-Team 296 1 Sa 6.02.2010, 00:01
MySQL-Volltextsuche mit REGXP PH 191 10 Do 4.02.2010, 16:47
Programmierer (PHP/MySQL/JS) im Raum Dresden qwerket 228 2 Mo 1.02.2010, 12:11
Diskussion: Dynamische Subdomains: How-To Ayom-Team 248 6 Sa 30.01.2010, 23:00
Diskussion: Freie Software- und Content-Lizenzen Ayom-Team 709 3 Sa 30.01.2010, 14:35




Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]