PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler beim Anmelden - aber nur online



dead_orc
23.01.2005, 19:33
Tja, ich habe (schon vor dadie) einen Filemanager gemacht. Der funktionier tauch (besonders lokal) ausgezeichnet, aber nun ist das Problem, dass man sich, wenn ich ihn online stelle, zwar anmelden kann, aber sofort wieder rausfliegt bei der ersten Aktion/Reload.

Der dazu relevante Code ist leider sehr groß, da ich die Benutzer in einer Datei speichern wollte. Naja, egal:

<?php
define('PHP_SELF', $_SERVER['PHP_SELF']);
define('USER_FILE', 'user.xml');
define('IMAGE_DIR', 'images/');
session_name('sid');
session_start();

### User-Datei einlesen und auswerten ###
$i = 0;
function startElement($parser, $element_name, $element_attribute)
{
global $element;
$element_name = strtolower($element_name);
$element = $element_name;
}

function endElement($parser, $element_name)
{
global $i;
$element_name = strtolower($element_name);
if($element_name == 'user')
{
$i++;
}
}

function cdata($parser, $element_inhalt)
{
global $i;
global $users;
global $element;
$tmp = str_replace(' ', '', $element_inhalt);
$tmp = str_replace("\t", '', $tmp);
$tmp = str_replace("\n", '', $tmp);
$tmp = str_replace("\r", '', $tmp);
if($tmp)
{
$users[$i][$element] = $element_inhalt;
}
}
$parser = xml_parser_create();
$xmlFile = file(USER_FILE);
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "cdata");

foreach($xmlFile as $elem)
{
xml_parse($parser, $elem);
}

### Benutzer anmelden ###
if(isset($_POST['login']) AND isset($_POST['user']) AND isset($_POST['password']) AND $_POST['login'] == 'Login' AND isset($_POST['user']) AND isset($_POST['password']))
{
foreach($users AS $tmp)
{
if($_POST['user'] == $tmp['name'] AND md5($_POST['password']) == $tmp['password'])
{
$_SESSION['name'] = $_POST['user'];
$_SESSION['password'] = md5($_POST['password']);
header('Location: '.PHP_SELF);
exit;
}
}
}

### Prüfen, ob Benutzer angemeldet ist ###
foreach($users AS $tmp)
{
if(isset($_SESSION['name']) AND isset($_SESSION['password']) AND $_SESSION['name'] == $tmp['name'] AND $_SESSION['password'] == $tmp['password'])
{
$loggedin = TRUE;
$user = $tmp;
}
}
if(isset($loggedin))
{
// Der Filemanager an sich
}
?>
Die Datei user.xml:

<?xml version="1.0" encoding="iso-8859-1" ?>
<users>
<user>
<name>username</name>
<password>MD5-Passwort (aus Sicherheitsgründen entfernt)</password>
<write>true</write>
</user>
<user>
<name>Gast</name>
<password>MD5-Passwort (aus Sicherheitsgründen entfernt)</password>
<write>false</write>
</user>
</users>

Ich bin mir sicher, dass der Fehler ein ganz doofer und kleiner ist, aber ich finde ihn einfach nicht! Plz help! Thx!

dadie
23.01.2005, 20:15
ich kenne mich zwar Nicht so mit session´s aus darum kann das nur ne Vermuttung sein

Vieleicht macht er bei jedem aufruff ne Neue session wodurch bei jeden klick die alte (aktive) ungültig wird.

Kann mich irren !

btw.Warum siht deiner besser aus als meiner http://www.multimediaxis.de/images/smilies/old/3/nonono.gif

dead_orc
24.01.2005, 13:52
@besseres Aussehen: Kann ich mir nicht vorstellen, ich hab das Ding an weniger als einem Tag zusammengeschraubt :rolleyes:

@immer neue Session: Nö, ich hab den dazugehörigen Cookie bei einem neuen Aufruf mit dem alten verglichen - gleiche SID! Wäre höchstens noch eine Möglichkeit, dass sowohl 1&! (die ja eigendlich nichtmal PHP unterstützen) und Funpic keine Sessions akzeptieren (bei Funpic hab ichs auch getestet!)

[EDIT]
OK, Funpic zumindest unterstützt Sessions (hab mich gerade in meinem Forum per Sessions angemeldet - kein Problem!)

Manni
24.01.2005, 16:09
Mit der Funktion session_start() erstellst du eine neue Session und afaik wird dabei die alte überschrieben. Mach das so, dass nur beim Login eine Session erstellt wird. ;)

Ich hoffe das geht so...

dadie
24.01.2005, 16:12
Mit der Funktion session_start() erstellst du eine neue Session und afaik wird dabei die alte überschrieben. Mach das so, dass nur beim Login eine Session erstellt wird. ;)

Ich hoffe das geht so...

Erst mal lesen http://www.multimediaxis.de/images/smilies/old/s_009.gif


ich kenne mich zwar Nicht so mit session´s aus darum kann das nur ne Vermuttung sein

Vieleicht macht er bei jedem aufruff ne Neue session wodurch bei jeden klick die alte (aktive) ungültig wird.

Kann mich irren !




@immer neue Session: Nö, ich hab den dazugehörigen Cookie bei einem neuen Aufruf mit dem alten verglichen - gleiche SID! Wäre höchstens noch eine Möglichkeit, dass sowohl 1&! (die ja eigendlich nichtmal PHP unterstützen) und Funpic keine Sessions akzeptieren (bei Funpic hab ichs auch getestet!)

rgb
24.01.2005, 16:17
Funpic unterstützt sessions, habe ich selber schon getestet, da ich Funpic ne Zeit lang quasi als Werkstatt benutzt habe, weil unser alter Webspace down war.

dadie
24.01.2005, 16:19
Bin ich der einzige der Postes liesst ? Ork schreib doch da oben


[EDIT]
OK, Funpic zumindest unterstützt Sessions (hab mich gerade in meinem Forum per Sessions angemeldet - kein Problem!)




Funpic unterstützt sessions, habe ich selber schon getestet, da ich Funpic ne Zeit lang quasi als Werkstatt benutzt habe, weil unser alter Webspace down war.

dead_orc
24.01.2005, 16:52
Oha.

@Manni_the_dark: Das funktioniert nicht. Damit kommt man nicht einmal mehr auf die erste Seite. Hätte mich auch gewundert, weil es beim Forum so funktioniert.

@dadie: Wenigstens einer, der meine Posts liest und versteht ;)

@alle anderen: Any more ideas?

Manni
26.01.2005, 21:23
Naja, hier mal meine session.php:

require("sql.inc.php");
session_register(userid);
session_register(username);
session_register(userpwd);
if(empty($userid) || empty($username) || empty($userpasswort)) {
$login = false;
} else {
$sessionverbindung = mysql_connect($host, $sqlname, $sqlpasswort);
$befehl = "SELECT * FROM `users`";
$antwort = mysql_db_query($dbname, $befehl, $sessionverbindung);
while($row = mysql_fetch_array($antwort)) {
if ($row['uid'] == $userid && $row['passwort'] == $userpwd && $row['name'] == $username) {
$login = true;
}
}
}

Und die passende login.php(Ausschnitt):

...
session_start();
session_register(userid);
session_register(username);
session_register(userpwd);
$userid = $id;
$username = $name;
$userpwd = md5($pwd);

Bei mir funktioniert das wunderbar. Man muss nur noch in jede zu schützende Datei die session.php einbinden und die Variable $login abfragen :( *verwirrt ist*

Manni

rgb
27.01.2005, 14:36
Komm mal klar Dadie!
Mit deinen "lies dies,lies das posts" nervst du mich.
Man kann auch mal was überlesen:rolleyes:, als wenn du hier der oberchecka wärst.
So machst du dir echt keine Freunde (zunindest nicht mich).

dadie
27.01.2005, 15:45
Komm mal klar Dadie!
Mit deinen "lies dies,lies das posts" nervst du mich.
Man kann auch mal was überlesen:rolleyes:, als wenn du hier der oberchecka wärst.
So machst du dir echt keine Freunde (zunindest nicht mich).

Ich wollte nur das die Disktusion miteinander statfinded und nett an einander was währen wen :

Person X : Wie geht das teil an ? Ich habe schon das rote 3eck angestellt
Person Y : Du musst das Rote 3 eck drücken
Person X : Habe ich doch getahn !
Person Z : Drück das Rote 3eck du depp
Person X : Sama seid ihr dumm ? Habe ich doch getahn !
Person Y : He so machst du dir keine freunde ich helf dir nett mehr
Person Z : Ich kann dir auch nett weiter helfen aus zu sagen drück das Rote 3eck
Person M : So keine Diskusion Close

sowas wollte ich verhindern ;)

dead_orc
17.02.2005, 16:27
OK, da Chocwise es gerne sieht, wenn man seine Lösungen präsentiert:
Das Problem lag mal wieder am auf den Servern aktivierten register_globals!
Das "$user = $tmp;" im Anmeldeblock überschreibt dabei den Benutzernamen in der Session. Darauf gekommen bin ich durch Ausgabe der $_SESSION['user'] bei jedem Aufruf und durch Neuinstallation von (fast) allem, wodurch register_globals bei mir auch ganz unbemerkt aktiviert wurde. Nu funktioniert er vollständig. Trotzdem danke an alle, die versucht haben, mir zu helfen ;)

@dadie: Wie weit bist du mit deinem? Oder hast du das Projekt abgebrochen?

dadie
17.02.2005, 16:45
@dadie: Wie weit bist du mit deinem? Oder hast du das Projekt abgebrochen?

Nee das lebt noch nur habe ich eben Probleme meinen PC zu sichern und glaube mir das ist Garnett so einfach
;)