• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Script ändert Session uid

vanGoss

Neues Mitglied
Guten Tag
Ich habe ein sehr einfaches Forum script gemacht, da ich für die Schule eins benötige.
Jetzt arbeite ich immer weiter daran.
Aber ich habe auf einmal ein Problem:
Ein Script dass anhand der GET uid oder SESSION uid die profildetails anzeigen soll, ändert die session uid
ich weis nicht wie ich das geschafft habe, ich bitte um hilfe
wahrscheinlich habe ich einen kleinen fehler aber den habe ich trotz zig fachem durchschauen übersehen.
Vielen dank den Helfern
PHP:
<?php
session_start();

if(!isset($_SESSION["vorname"]))
   {
   echo "Bitte erst <a href=\"login.php\">einloggen</a>";
   exit;
   }

include "head.htm";

include "constant.php"; // die Konfigurationsdateien lesen.
  
         // Verbindung zu MySQL Aufbauen
    @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());

$suid = $_SESSION['uid'];
$guid = $_GET["uid"]    ;

echo $suid;
echo $guid;

echo "<a href=\"home.php\">Forum</a><br>";
echo "<a href=\"profil_aendern.php\">Eigenes Profil ändern</a><br>";
echo "<form action=\"logout.php\">"; 
echo "<input type=\"submit\" value=\"Logout\">"; 
echo "</form>"; 
echo "<br><br><br>";

if(isset($_GET["uid"])) {
        $uid = $guid;
}else{
        $uid = $suid;
}
$abfrage = "SELECT * FROM user WHERE uid = '$uid'";
$ergebnis = mysql_query($abfrage);
echo $ergebnis;
while($row = mysql_fetch_object($ergebnis))
   {
   
   echo "<h2>Profil von $row->nickname</h2><br><br><br><br>Vorname: $row->vorname<br>Nachname: $row->nachname<br>Logindatum: $row->logindatum<br>Email: <a href=\"mailto:$row->email?subject=AW: Forum\">$row->email</a><br>";
   if($row->homepage != ''){ echo "Homepage: <a href=\"$row->homepage\" target=\"_blank\">$row->homepage</a><br>";}

   }

include "footer.htm";
   
?>
ich denke dass ich ales richtig gemacht habe
die uid ist einfach eine fortlaufende nummer
ich habe 2 mysql tabellen
eine für die benutzer und eine für die forenbeiträge(es gibt nur ein forum)
und die uid ist primary key und auto increasment
und wenn ich mich normal einlogge (danach werden die wichtigsten daten in der session gespeichert) und diese seite aufrufe geht alles
aber wenn ich eine andere uid aufrufe(also zB profil.php?uid=3) dann zeigt er das an
wenn ich jetzt wieder nur die seite ohne gets aufrufe kommt der uid 3 obwohl ich 1 habe
und wenn ich das session array printe
PHP:
<?php
session_start();

print_r($_SESSION);
?>
dann zeigt er mir als uid 3 an:
Code:
Array (     [uid] => 3 ....
das geht auch für uid s die gar nicht existieren, sogar buchstaben

so dass war jetzt ausführlich und ich hoffe verständlich
sollten noch fragen offen sein dann stehe ich gerne zur verfügung

Gruß und vielen Dank schon im vorraus
vanGoss
 
erstens:
der trick an sessions ist der, sie (was nun deine uid betrifft) genau einmal zu belegen und dann nicht mehr zu ändern.

wirf das raus:
PHP:
$suid = $_SESSION['uid'];
$guid = $_GET["uid"]    ;
und verweise direkt auf $_GET und $_SESSION, so ist das doppelt gemoppelt und speicher verschwendung.

mein vorschlag um sowas zu verhindern ist folgender:
mach dir eine auth.php (athentification) wo du die login daten PRÜFST und eventuell ins login verweist!
diese daten darfst du nicht mehr angreifen. also nach (beim) login setzen und dort belassen. dort kannst du auch den folgenden teil unterbringen.

auth.php
PHP:
if(!isset($_SESSION["vorname"]) or ($_SESSION['vorname'] == ""))
{
  echo "Bitte erst <a href=\"login.php\">einloggen</a>";
  exit;
}
in der login setzt du bei erfolgreichem login dein session für die uid, danach prüfst du sie nur noch.

meine scripte sehen fast immer ca so aus:
PHP:
<?php
session_start();
require_once("auth.php");
.
.
.
.
 
Also danke erstmal für die schnelle Antwort
Aber das Problem bleibt
sobald ich die profil.php seite gehe ändert sich meine session uid der im profil gewählten an
und bleibt dann natürlich auch so
profil.php:
PHP:
<?php
session_start();
require_once("auth.php");

include "head.htm";

include "constant.php"; // die Konfigurationsdateien lesen.
  
         // Verbindung zu MySQL Aufbauen
    @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());



echo "<a href=\"home.php\">Forum</a><br>";
echo "<a href=\"profil_aendern.php\">Eigenes Profil ändern</a><br>";
echo "<form action=\"logout.php\">"; 
echo "<input type=\"submit\" value=\"Logout\">"; 
echo "</form>"; 
echo "<br><br><br>";

if(isset($_GET["uid"])) {
        $uid = $_GET["uid"];
}else{
        $uid = $_SESSION["uid"];
}
$abfrage = "SELECT * FROM user WHERE uid = '$uid'";
$ergebnis = mysql_query($abfrage);
echo $ergebnis;
while($row = mysql_fetch_object($ergebnis))
   {
   
   echo "<h2>Profil von $row->nickname</h2><br><br><br><br>
            Vorname: $row->vorname<br>
            Nachname: $row->nachname<br>
            Logindatum: $row->logindatum<br>
            Email: <a href=\"mailto:$row->email?subject=AW: Forum\">$row->email</a><br>";
   if($row->homepage != ''){ echo "Homepage: <a href=\"$row->homepage\" target=\"_blank\">$row->homepage</a><br>";}

   }

include "footer.htm";
   
?>
auth.php:
PHP:
<?php
include "head.htm";

if(!isset($_SESSION["vorname"]) or ($_SESSION['vorname'] == "") or 
    !isset($_SESSION["nachname"]) or ($_SESSION['nachname'] == "") or 
    !isset($_SESSION["uid"]) or ($_SESSION['uid'] == "") or 
    !isset($_SESSION["email"]) or ($_SESSION['email'] == ""))
{
  echo "Bitte erst <a href=\"login.php\">einloggen</a>";
  include "footer.htm";
  exit;
}  

?>
login.php:
PHP:
<?php
session_start();


include "head.htm";

include "constant.php"; // die Konfigurationsdateien lesen.
  
         // Verbindung zu MySQL Aufbauen
    @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());




if(!isset($_POST['Login'])){
        echo "\n<form action=\"login.php\" method=\"post\">";
        echo "\nDein Nickname:<br>";
        echo "\n<input type=\"text\" size=\"24\" maxlength=\"50\" name=\"nickname\"><br><br>";
        echo "\nDein Passwort:<br>";
        echo "\n<input type=\"password\" size=\"24\" maxlength=\"50\" name=\"password\"><br>";
        echo "\n<input type=\"submit\" name=\"Login\" value=\"Login\">";
        echo "\n</form>";
        echo "\n<br><br><a href=\"eintragen.php\">Anmelden</a>";

    }else{

        if(trim($_POST['nickname']) == ""){
                echo "Geben Sie Ihren Nickname ein.<br><a href=\"login.php\">Login</a>";
            }elseif(trim($_POST['password']) == ""){
                echo "Geben Sie Ihr Passwort ein. <br><a href=\"login.php\">Login</a>";
            }else{
                $nickname = $_POST["nickname"];
                $passwort = md5(md5($_POST["password"]));
                
                $sql = "SELECT 
                            passwort,
                            uid
                        FROM
                            user
                        WHERE
                            nickname = '$nickname' AND
                            frei = 'ja'";
  
                $result = mysql_query ($sql);
                $check = mysql_fetch_array($result);
                if (mysql_num_rows($result) == 1){
                    if($check['passwort'] == $passwort){
                            $uid = $check['uid'];
                            $sql = "SELECT 
                                        uid,
                                        email,
                                        vorname,
                                        nachname,
                                        homepage
                                    FROM
                                        user
                                    WHERE
                                        uid = '$uid'";
                            $result = mysql_query ($sql); 
                            $check = mysql_fetch_array($result);
                            $_SESSION["uid"] = $check['uid'];
                            $_SESSION["email"] = $check['email'];
                            $_SESSION["vorname"] = $check['vorname'];
                            $_SESSION["nachname"] = $check['nachname'];
                            $_SESSION["homepage"] = $check['homepage'];
                            echo "Guten Tag ".$_SESSION['vorname']."&nbsp;".$_SESSION['nachname'].". <br>Login erfolgreich. <br> <a href=\"home.php\">Weiter</a>";
                        }else{
                            echo "Nickname und/oder Passwort waren falsch. <a href=\"login.php\">Login</a>";
                        }
                }else{ 
                    echo "Nickname und/oder Passwort waren falsch. <a href=\"login.php\">Login</a>";

                }
  
  
            }
    }

include "footer.htm";

?>
so das war jetzt alles wichtige glaub ich
ich denke dass das iwie an diesem teil aus der profil.php liegt:
PHP:
if(isset($_GET["uid"])) {
        $uid = $_GET["uid"];
}else{
        $uid = $_SESSION["uid"];
}
weil nur da kommen get und session aneinander
bzw die sind nur da verwendet

vielen dank für eure hilfe
schöne feiertage

gruß
vanGoss
 
Also ich hab jetzt nomal rumprobiert und immer an verschiedenen orten im document ses und get ausgegeben
und bin auf immer weniger zwischenzeilen gegangen
und wo ich druaf gekommen bin war dann des :
PHP:
        echo "Get:".$_GET['uid'];
        echo "Ses:".$_SESSION['uid'];
        $uid = $_GET["uid"];
        echo "Get:".$_GET['uid'];
        echo "Ses:".$_SESSION['uid'];
bei diesem code wird dann dieses ausgegeben(bei einer vorherigen ses von 1 und einer get von 3):
Code:
Get:3Ses:1Get:3Ses:3
also dieser teil ändert die ses
mir ist zwar schleierhaft wieso aber vllt kann ichs beheben wenn ich anstatt:
PHP:
if(isset($_GET["uid"])) {
        $uid = $_GET["uid"];
        $abfrage = "SELECT 
                        * 
                    FROM 
                        user 
                    WHERE 
                        uid = '$uid'";
}else{
        $uid = $_SESSION['uid'];
        $abfrage = "SELECT 
                        * 
                    FROM 
                        user 
                    WHERE 
                        uid = '$uid'";
}
die ses/get gleich in die abfrage reinziehe
aber wie
weil wenn ichs probiere kommen parse errors
weil ich ja das anführungzeichen von select("), das um die variable (') und das in der session habe('/")
wie soll ich das lösen
mit escapen?!?
aber wie
bitte um hilfe

gruß
vanGoss
 
die ses/get gleich in die abfrage reinziehe
aber wie
weil wenn ichs probiere kommen parse errors
weil ich ja das anführungzeichen von select("), das um die variable (') und das in der session habe('/")
wie soll ich das lösen
mit escapen?!?
aber wie
bitte um hilfe
In der Form kannste Array mit einbeziehen:
PHP:
$befehl = "SELECT * FROM `bla` WHERE `id`='".$_SESSION['uid']."'";
Suchst du sowas?

Mfg
 
Gelöst

Ja VIELEN dank
es klappt
jetzt wird da keine session mehr geändert:D
ich weis zwar den wirklichen fehler immer noch nicht aber jetzt tritt er nicht mehr auf also passt alles

vielen dank für die schnellen hilfen
gruß und schöne feiertage
vanGoss
 
Zurück
Oben