login für mehre users

lyco

Mitglied
Hallo
Ich habe ein loginscript für mehre user was eigentlich ganz gut funktioniert. Es hat nur einen Fehler und zwar wenn sich ein user erfolgreich angemeldet hat wird er auf seine Seite weitergeleitet. Nun wenn er aber eine url von einem andern user kenn kann er auch auf die Seite des andern users zugreifen, wass nicht der Fall sein solte.
Kann mir da jemande helfen, da ich von php nicht sehr ahnung habe


checkuser.php
Code:
<?php  
session_start (); 
if (!isset ($_SESSION["user_id"])) 

{  
  header ("Location: http://www............./inside/index.php");  
}  
?>

login.php
Code:
<?php  
// Session starten 
session_start (); 

// Datenbankverbindung aufbauen  
$connectionid = mysql_connect ("localhost", "", "");  
if (!mysql_select_db ("", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}  

$sql = "SELECT ".  
    "Id, Nickname, Nachname, Vorname, Link ".  
  "FROM ".  
    "benutzerdaten ".  
  "WHERE ".  
    "(Nickname like '".$_REQUEST["name"]."') AND ".  
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')";  
$result = mysql_query ($sql);  

if (mysql_num_rows ($result) > 0)  
{  
  // Benutzerdaten in ein Array auslesen.  
  $data = mysql_fetch_array ($result);  

  // Sessionvariablen erstellen und registrieren  
  $_SESSION["user_id"] = $data["Id"];  
  $_SESSION["user_nickname"] = $data["Nickname"];  
  $_SESSION["user_nachname"] = $data["Nachname"];  
  $_SESSION["user_vorname"] = $data["Vorname"];  

  header ("Location: http://www.........../inside/" . $data["Link"]);  
}  
else  
{  
  header ("Location: http://www................/inside/index.php?fehler=1");  
}  
?>
 
In wie fern meinst du das mit, seine Seite und Seiten anderer User?

Profil ändern?
 
z.B. user 1 mit passwort 1 wird auf die seitt user1.php weitergeleitet
und user 2 mit passwort 2 wird auf die seite user2.php weitergeleitet.
Wenn sich jetzt user 1 erfolgreich eingelogt hat und auf die seite user1.php weitergeleitet wurde, kann er in der explorer in der Adresszeile user1.php auf user2.php ändern und kommt dann auf die seite von user 2. Das solte aber unterbunden werden.
 
Werden die Seiten generiert ?
Sowas ist doch höchst unpraktisch bei mehreren Membern oder ?
Naja eigentlich macht man nur eine Seite z.B. für Profil und liest die Daten aus, dafür hast du ja die SESSION-VARS aber wenn du nur 2 user hast kannste ja per id abfragen ob es der richtige user is aber eigentlich sehr komischer Ansatz oder ich versteh das nicht :)
 
Bis jetzt gibt es 3 users die über das selbe script einlogen und auf 3 verschiede seiten weitergeleitet werden. Es ist aber sehr gut möglich dass noch mehr kommen. Kann man das mit den bis jetzt verwenden script korrigieren. Und demensprechend erweitern?
 
Naja ich denke das es nicht gerade optimal ist, dein System da, aber ok für eine kleine Anzahl von Usern kann man es machen.

PHP:
if($_SESSION['user_id'] != $user_id) {  //$user_id kann auch durch eine Zahl ersetzt werden.
header("Location: .../fehlerseite.php");
die();
}

Das fügst du dann am anfang der Seite der User ein.

Oder hier dann auch nochmal die Funktions Variante.

PHP:
function Userseite ($session_user, $id_user, $errorpage) {
if($session_user != $id_user) { 
header("Location: $errorpage);
die();
} }

Userseite($_SESSION['user_id'], 1, fehlerseite.php);
So sähe dann die Funktion aus.
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Lösungsvorschäge aber leider blick ich nicht durch oder es funktioniert nicht. Die User können immer noch auf die Seiten von anderen User zugreifen.
 
Anstelle von user1.php, user2.php, ... solltest Du besser eine user.php haben die anhand der UserID in der Session den entsprechenden Inhalt aus der Datenbank holt. So brauchst Du Dir dann auch keine Sorgen mehr machen, dass ein User auf die Seite eines anderen Users zugreifen kann.
 
@Dennis Wronka
Wow das hört sich ganz gut an. Nur hab ich leider keine Ahnung wie ich dass anstellen kann. Köntest du mir da vieleicht helfen?
 
Sagen wir mal Du speicherst die UserID in $_SESSION['id'], dann fragst Du in user.php als erstes ab ob dieser Wert gesetzt ist, wenn nicht geht's zur Startseite. Ungefaehr so:
PHP:
if (empty($_SESSION['id']))
{
 header('Location:index.php');
 exit;
}
Wenn $_SESSION['id'] nicht gesetzt, oder aber gesetzt aber leer ist, wird umgeleitet zur index.php. Nachfolgender Code wird nicht mehr ausgefuehrt, dafuer sorgt exit.
Alles andere nach diesem Code kann also davon ausgehen, dass $_SESSION['id'] sowohl gesetzt als auch gefuellt ist. Was dann ja heisst, dass der User eingeloggt ist.
Du kannst dann also aus der Datenbank irgendwelche Infos fuer eben diesen User holen.
PHP:
$infos=mysql_query("select * from infos where userid='".$_SESSION['id']."'");
while ($info=mysql_fetch_assoc($infos))
{
 //Daten ausgeben
}
Durch die Arbeit mit der UserID aus der Session stellt dabei sicher, dass wirklich nur die Informationen aus der Datenbank geholt werden die fuer den eingeloggten User bestimmt sind. Bei einer Uebergabe der UserID im URL koennte der User ja einfach die uebergebene UserID aendern. Zwar koennte man auch da was dran machen, aber wenn man gleich mit der in der Session gespeicherten UserID arbeitet wird das unnoetig.
 
Zurück