Mit PHP benutzer_id seitenzugriffe erstellen

Hallo Liebe Community,

habe nochmal eine Frage zu PHP. Hab mich gerade erste eingelesen und noch nicht zu 100% fit in PHP deswegen so komische Fragen :smile:

Habe jetzt eine Benutzerlog in gebaut.

Sprich es gibt einmal die Möglichkeit sich zu registrieren, diese Daten werden dann in einer Mysql datenbank gespeichert, das PW wird als MD5 Hash Wert verschlĂŒsselt. Und der Benutzer hat dann die Möglichkeit sich anzumelden. Bei der Registrierung wird eine Benutzer ID mitgespeichert und diese wird auch wieder beim Benutzerlogin abgefragt. Aber wie kann ich jetzt Seiten „verschlĂŒsseln“ so dass man sich diese erst sichtbar werden wenn man eingeloggt ist, bzw. wie kann ich dateien oder formulare (z.B. Bestellformular) verschlĂŒsseln so dass es erst abgesendet wird wenn der Benutzer eingeloggt ist. Sprich das das die Bestellung dann auch dem richtigen Benutzer zu zuordnen ist. Es reicht ja bestimmt nicht einfach das so einzufĂŒgen in die Site:

<?php session start()?><?php if (!$UserID = getUserID($db)) {
return NOT\_LOGGED\_IN;

}?>

und dann die Site.

Weil dann wĂŒrde die Site ja angezeigt werden obwohl der Benutzer nicht angemeldet ist. Habe schon versucht das bei google irgendwie rauszubekommen aber habe noch nichts passendes gefunden. Ein Tutotial dazu wĂŒrde mir schon reichen.

Vielen Dank im vorrausch schonmal.

Euer Ben

Hi,
steht in den Beispielen.

http://de3.php.net/manual/de/intro.session.php

Gruss
Joey

Also erstmal vielen Dank fĂŒr die schnellen Antworten. Aber ich verstehe nicht ganz wie genau ich das in die Site einbauen muss. Ich habe durch Zufall mal ein Newsletterscript gefunden mit Adminbereich. Hier ist es so das ich mich einloggen muss und dann in den Adminbereich komme. Das ganze ist so geschrieben. Damit ich das ganze auch nachvoll ziehen kann schreibe ich mal dazu was ich denke was fĂŒr was zustĂ€ndig ist. Wie gesagt kenne gerade mal die Grundbegriffe und bin dabei zu lernen also bitte net lachen ^^.

session_start(); --> Startet die Session
$zeit=time ();
$nichtmehrgueltig=$zeit-$stehenlassen;
$nl=chr(13).chr(10);
$action=$_GET[‚action‘];

if($action==„logout“){ // Admin logout
session_unset („logedin“);
session_destroy(); --> Zerstört die Session wenn man auf Log out geht
header(„Location: http://“.$_SERVER[‚HTTP_HOST‘]);–> Leitet auf diese Seite wenn man ausgeloggt ist
} elseif($action==„login“){ // Admin login
$name = $_POST[‚name‘];
$pw = $_POST[‚pw‘];
if($name==$adminname && $pw==$adminpw){
ini_set(„session.use_cookies“, „0“); --> setzt ein Cookie wenn PW und Benutzername richtig ist
$_SESSION[„logedin“] = true;
header(„Location: http://“.$_SERVER[‚HTTP_HOST‘].$_SERVER[‚SCRIPT_NAME‘]."?action=admin"); --> Leitet dann auf die verschlĂŒsselte Site
} else {
header(„Location: http://“.$_SERVER[‚HTTP_HOST‘]);
}
}

Die Daten wie Benutzername und PW habe ich vorher schon definiert mit folgendem Code:

$adminname=„root“;
$adminpw=„12345“;
$adminmail=„[email protected]“;
$stehenlassen=172800;
$db=„xXx“;

Kann ich das dann abÀndern mit den Daten des Benutzers bzw. mit einer benutzer_id??

Meine Log In Bereich erstellt dann nÀmlich folgende Daten.

mysql_select_db($database_db, $db);
$query_login = sprintf("SELECT benutzer.benutzer_id, benutzer.vorname,
benutzer.nachname FROM benutzer WHERE benutzer.email = %s AND
benutzer.passwort = PASSWORD(%s) ",
GetSQLValueString($var_email_login,
„text“),GetSQLValueString($var_passwort_login, „text“));
$login = mysql_query($query_login, $db) or die(mysql_error());
$row_login = mysql_fetch_assoc($login);
$totalRows_login = mysql_num_rows($login);
if($totalRows_login == 1)

Denn es geht ja um diese benutzer_id. Und der Benutzer soll sich ja auch nicht immer wieder neu anmelden wenn er auf eine andere Seite klickt. Sprich der Cookie mĂŒsste doch dann eig. mit dem Log In geschehen und nicht erst wenn die session gestartet wird.

Oder reicht es wenn ich die Daten so abĂ€ndere? (das wĂŒrde fĂŒr mich jetzt logisch sein muss aber net stimmen)

$adminname="$_SESSION[‚benutzer_id‘]";
$adminpw="$_SESSION[‚benutzer_id‘]";
$adminmail=„[email protected]“; —> ist fĂŒr den Log In unwichtig
$stehenlassen=172800; was das bedeutet kA
$db=„xXx“; und die Datenbank ist ja auch irrelevant

somit sag ich ihm ja das das der Name und das PW die benutzer_id die ja erst angelegt wird wenn sich der Benutzer anmeldet. Somit kann man vorher nicht auf die Seite zugreifen. Ich weiß aber net ob das sinnvoll bei PHP ist.

Viele Fragen. Ist aber einfacher so als wenn ich jetzt wieder Stundenlange suche bei google betreibe also hoffe ich jemanden zu finden der sich mir erbarmt. WĂ€re der Person sehr dankbar.

Als erstes sag ich mal , viele wege fĂŒhren nach Rom.

Es gibt nicht richtige oder falsche Wege, solange sie alle nach Rom fĂŒhren.

Aber eins ist schonmal ganz falsch , verschlĂŒsselt wird eine Seite mit https .
Was du meinst ist Protected , also Login gesichert.

Ein paar Grundlagen :

  1. Sessions werden auf dem Server gespeichert , damit der Server weiss welche Session gemeint ist braucht es die Session ID wenn mit der Session weiter gearbeitet wird .
  2. PHP ist eingebettet in HTML.
  3. Cookies werden erst beim nÀchsten Aufruf der Webseite gesetzt.

Meist benutze Lösung bei mehr als einer Datei (also eine Login Datei eine User Datei)

es gibt also eine

login.php
user.php

Die Login PHP ist nur fĂŒr die Anmeldung zustĂ€ndig.

Dazu machen wir uns erstmal ein Formular :

Login Formular

was liefert uns diese Form wenn wir sie an login.php verschicken :

$_POST[‚action‘] == „login“
$_POST[‚username‘] == Eingabe vom Webuser
$_POST[‚userpass‘] == Eingabe vom Webuser

Wir folgern also das wir ein Login haben wenn wir in action den wert login finden.

kleiden wir das mal in ein PHP

<?php /* die login.php */
/\* session aufnehmen oder starten\*/ /\*\* set cookie \*/ session\_set\_cookie\_params((60\*60\*24\*31), '/'); /\*\* set session name \*/ session\_name('meinesession'); start\_session(); /\* wenn schon SESSION['userid'] Daten auf Server ist es ein User if (isset($\_SESSION['userid'])) { /\* rufe die user.php auf \*/ header("Location: http://localhost/user.php"); /\* programm beenden \*/ exit; } $userid = 0; /\* wurde ein INPUT-Feld namens action gesendet \*/ if (isset($\_POST['action')) { /\* ist der Wert gleich login \*/ if ($\_POST['action') == "login") { /\* dann prĂŒfen ob login daten in datenbank sind \*/ $userid = checkuserlogin($\_POST['username'] , $\_POST['userpass']); /\* SESSION variable setzen wenn user eine ID in der Datenbank hat if ($userid \> 0 ) { $\_SESSION['userid'] = $userid; /\* wenn ja , dann rufe die user.php auf \*/ header("Location: http://localhost/user.php"); /\* programm beenden \*/ exit; } /\* ist der Wert gleich logout \*/ if ($\_POST['action'] == "logout") { /\* SESSION löschen \*/ session\_unset(); session\_destroy(); /\* kein exit, damit die Login Form angezeigt wird \*/ } } ?\> Login Formular <?php /* wenn es kein cookie gibt brauchen wir die session id als input feld */
if (!isset($\_COOKIE[session\_name()])) { ?\><?php }
?\> so damit hĂ€tten wir also schon einmal eine login form die nur angezeigt wird wenn noch kein login erfolgreich war. Die Funktion checkuserlogin musst du selber schreiben , bei nicht erfolg soll sie 0 als Wert zurĂŒckgeben , bei erfolg die userid die wohl grösser als 0 ist. die passende user.php <?php /* die user.php */
/\* session aufnehmen oder starten\*/ session\_name('meinesession'); start\_session(); /\* wenn keine Session Daten auf Server vorhanden \*/ if (!isset($\_SESSION['userid'])) { /\* ist kein user also \*/ echo "Nur fĂŒr User"; /\* programm beenden \*/ exit; } ?\> User Bereich\>/h1\> Hallo User !!! user.php wir also dann abgebrochen wenn es keine SESSION['userid'] auf dem Server findet.