WinFuture-Forum.de: Fragen Zu Logonscript! - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Fragen Zu Logonscript!


#1 Mitglied ist offline   Picard 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Puffbohne

geschrieben 29. Mai 2008 - 05:41

Guten Morgen,

ich habe 1-2 Fragen zu einen Logonscript was ich bei mir einsetze. Ich werde erstmal kurz die Dateien posten:

Das Script so funktioniert in Moment!

Das ist die login.php
<?php
session_start();
include_once('../config/login_funktionen.php');

if ( isset($_POST['login']) )
{
	$userid = check_user($_POST['nick'], $_POST['pw']);
	if ($userid!=false)
	{
		login($userid);

	$_SESSION["nickname"] = $_POST['nick'];
	$_SESSION["db_id"] = $userid;
	$_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
	}
	else
	{
	echo "<script LANGUAGE=\"JavaScript\">";
	echo "top.index.location.href='../index_01.php?pw=false'";
	echo "</script>";
	}
}

if ( !logged_in() ) // Wenn nicht eingeloggt
{
	echo "<script LANGUAGE=\"JavaScript\">";
	echo "top.index.location.href='../index_01.php?pw=false'";
	echo "</script>";
}
else
{
	echo "<script LANGUAGE=\"JavaScript\">";
	echo "top.index.location.href='../home.php'";
	echo "</script>";
}
?>


Hier ist die session.php die jede Seite schützen soll:

<?php
session_start();
include_once('login_funktionen.php');

if ( !logged_in() )
{
	if (strstr($_SERVER['REQUEST_URI'], 'config') == true)//Prüfen ob sich der Server noch im Ordner "Config" befindet oder nicht
	{
	echo "<script LANGUAGE=\"JavaScript\">";
	echo "top.index.location.href='index_01.php?login=no'";
	echo "</script>";
	exit;
	}
	else
	{
	echo "<script LANGUAGE=\"JavaScript\">";
	echo "top.index.location.href='index_01.php?login=no'";
	echo "</script>";
	exit;
	}
}
else
{
$user_login = $_SESSION["nickname"];
$user_id = $_SESSION["db_id"];
}
?>


Hier die logout.php

<?php
session_start();

include_once('../config/login_funktionen.php');

if ( !logged_in() )
{
echo "<script LANGUAGE=\"JavaScript\">";
echo "top.location.href='../'";
echo "</script>";
}

echo "<script LANGUAGE=\"JavaScript\">";
echo "top.location.href='../'";
echo "</script>";

logout();

?>


Und zum schluss die wo die funktionen drin sind. login_funktionen.php
<?php
function connect ()
{
	$con = mysql_connect('localhost', 'root', 'root') or exit(mysql_error());
	mysql_select_db('eventpage', $con) or exit(mysql_error());
}

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 id FROM event_user_login WHERE nick = \'' . $name . '\' AND pw = \'' . md5($pass) . '\'';
	if ( !$result = mysql_query($sql) ) {
		exit(mysql_error());
	}
	if ( mysql_num_rows($result) == 1 ) {
		$user = mysql_fetch_assoc($result);
		return ( $user['id'] );
	} else {
		return ( false );
	}
}

function login ( $userid )
{
	$sql = 'UPDATE event_user_login SET UserSession = \'' . session_id() . '\' WHERE id = ' . ((int)$userid);
	if ( !mysql_query($sql) ) {
		exit(mysql_error());
	}
}

function logged_in ()
{
	$sql = 'SELECT id FROM event_user_login WHERE UserSession = \'' . session_id() . '\'';
	if ( !$result = mysql_query($sql) ) {
		exit(mysql_error());
	}
	return (mysql_num_rows($result) == 1);
}

function logout ()
{
	$sql = 'UPDATE event_user_login SET UserSession = NULL WHERE UserSession = \'' . session_id() . '\'';
	if ( mysql_query($sql) ) {
		exit(mysql_error());
	}
}

connect();

?>


So, jetzt habe ich das Problem, wenn man auf der Loginseite keine Daten oder falsche Daten eingibt dann erscheint nur die Logonseite nochmal. Es es sollte ja eigentlich "../index_01.php?pw=false" aufgerufen werden.

Verstehe ich das richtig? Weil er bekommt doch von der Funktion check_user() den Wert "False" übermittelt.

Habe auch schon mit einer Bedingung in der Funktion check_user() versucht den $name == "" zu prüfen.
Wenn ja dann return ( false );
Das nimmt er nicht.

Zum anderen habe ich bei meinen alten Loginscript was sehr einfach war mittels der Session noch ein paar daten übermittelt

$_SESSION["nickname"] = $_POST['nick'];
$_SESSION["db_id"] = $userid;

Somit konnte ich auf diese Werte von jeder Seite aus zugreifen. Möchte jetzt aber nicht so viel in die Session schreiben.

Was gibt es auser GET noch für eine alternative die 2 Werte irgendwie mit in jede Seite zu übernehmen.

Was haltet ihr von den Loginscript? Ich hatte vorher ein einfaches von: LINK


Sorry für den vielen Text aber mache mir halt gedanken für ein schönes Loginscript!
Danke schon einmal im vorraus für eure Antworten.


Gruß,

David
MFG

Picard
0

Anzeige



#2 Mitglied ist offline   Hawk18x 

  • Gruppe: Mitglieder
  • Beiträge: 14
  • Beigetreten: 02. Oktober 06
  • Reputation: 0

geschrieben 29. Mai 2008 - 11:16

Warum soll er auf die Index springen, wenn die Login-Daten nicht korrekt sind?
Versteh ich nicht. Meine Login-Scripte springen immer auf das Login-Script, wenn der User versucht einen Bereich zu öffnen, der für Gäste nicht zugelassen ist. Der Login gibt dann entsprechend eine Meldung mit Aufforderung sich entweder anzumelden oder zu registrieren.

Ich mein, jeder so, wie ihm beliebt.

Zu den Daten, die du mitgeben willst: Warum nicht in die Session schreiben? Das sind 2 Vars, die du setzt und die sind überall verfügbar. Ansonsten schreib die SESSION-ID in die DB zu dem User, der sie bekommen hat und übergib einfach nur die ID per GET. Dann haste nur einen Wert, anstatt 2 und den Rest kannste aus der DB nachladen, wenn benötigt.

Zum Logout:
Ich hab nur kurz drüber geschaut, aber versuch doch anstatt dem Javascript-Kram da mit header Location zu arbeiten. Das geht schneller und wird auf dem Server schon ausgeführt. Wenn Javascript ist, dann wirft der Server dem Client den code vor, der wertet aus und wirft dem Server das Fresschen wieder vor und der schick ne neue Seite an den Client. Das ist ein ziemliches hin und her, oder nicht? header Location kann das viel schneller. Vorsicht sei dabei aber geboten, es darf " !!! KEINE !!! " Ausgabe jeglicher Art erfolgen, bevor der header aufgerufen wird. Kein Echo, kein HTML-Code, nichts, was den Apache dazu bewegt Daten zum Versand fertig zu machen. Dann gibts Fehlermeldung.

Ansonsten schon ganz nett, wirklich.
0

#3 Mitglied ist offline   Picard 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Puffbohne

geschrieben 29. Mai 2008 - 11:39

Vielen vielen Dank, also geht das Loginscript erstmal so ja?

Nagut wenn ich es in der Session auf dem Server lassen kann...dann lass ich es dort.
Wenn es nicht schadet.

Beim Logout: Wenn ich die Session beende dann wird ja in der DB unter UserSession eine NULL geschrieben. Das ist ja auch gut so.

Aber leider kann ich nicht session_destroy() machen weil diese dann irgendwie nicht funzt.
Hätte gerne das auf dem Server die Session auch gecancelt wird. Finde ist sicherer aber wenn ich das daszwichen bauen klappt das NULL setzen in der DB nicht mehr.

Hättest du da noch eine Idee?

Danke,

Gruß!
MFG

Picard
0

#4 Mitglied ist offline   Hawk18x 

  • Gruppe: Mitglieder
  • Beiträge: 14
  • Beigetreten: 02. Oktober 06
  • Reputation: 0

geschrieben 29. Mai 2008 - 12:32

Schreib die Session-ID in ins SESSION-Array. Beim Logout löschst du das Array und den Eintrag in der DB. Das sollte reichen.

Eine Session kann im eigentlichen Sinne nicht beendet werden. Du kannst nur das $_SESSION-Array löschen.

session_destroy() reicht da schon aus.

ich sende beim Logout das hier:
	session_unset();
	session_destroy();


Damit ist zwar immernoch das Array $_SESSION gesetzt, aber vollkommen leer.
Um die Session wirklich zu löschen, musst du den Browser schließen, da dieser mit dem Webserver die Session hält.

Dieser Beitrag wurde von Hawk18x bearbeitet: 29. Mai 2008 - 12:36

0

#5 Mitglied ist offline   Picard 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Puffbohne

geschrieben 29. Mai 2008 - 13:08

Ja ok, ich versuche es noch einmal.
Hatte es aber schon aber irgendwie hat er das Array gelöscht aber in der DB nicht mehr...keine Ahnung warum...

<?php
session_start();
session_destroy();

include_once('../config/login_funktionen.php');

if ( !logged_in() )
{
echo "<script LANGUAGE=\"JavaScript\">";
echo "top.location.href='../'";
echo "</script>";
}

echo "<script LANGUAGE=\"JavaScript\">";
echo "top.location.href='../'";
echo "</script>";

logout();

?>


ODER SO

<?php
session_start();
session_destroy();

include_once('../config/login_funktionen.php');

if ( !logged_in() )
{
echo "<script LANGUAGE=\"JavaScript\">";
echo "top.location.href='../'";
echo "</script>";

logout();
}

logout();

echo "<script LANGUAGE=\"JavaScript\">";
echo "top.location.href='../'";
echo "</script>";

?>

MFG

Picard
0

#6 Mitglied ist offline   Picard 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Puffbohne

geschrieben 29. Mai 2008 - 20:26

Guten Abend,

ich wollte jetzt mein Logout Script verbessern:

Habe folgendes drin:

	<?php
	header("Location: ../");

	session_start();
	$tmp_sid = session_id();
	session_destroy();

	include_once('../config/login_funktionen.php');

	logout($tmp_sid);
	?>


Es funktioniert. Aber ich verstehe das nicht?
Eigentlich ist es doch so, sobald er auf das Header Location geht ist die Seite weg und der rest drunter sollte nicht abgearbeitet werden oder?

Hatte das Header Location nur zum Test oben mal rein geschrieben weil es woanders nicht funktioniert hatte.

Aber er macht das was ich will! Er geht nochmal in die Funktion und killt die Session.

Aber warum?
MFG

Picard
0

#7 Mitglied ist offline   Picard 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Puffbohne

geschrieben 30. Mai 2008 - 06:04

Ich habe jetzt noch einiges Modifiziert und habe einiges mit in die Logout Funktion übernommen.
Aber eigenartigerweiße übernimmt er das Header nicht.
Wenn ich es an den Anfrang schreibe dann funktioniert es. Aber wenn ich es so schreibe wie im den Beispiel hier dann bleibe ich nur auf der weißen logout seite:

<?php
include_once('../config/login_funktionen.php');

session_start();

logout();

header("Location: ../");

?>

MFG

Picard
0

#8 Mitglied ist offline   Picard 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Puffbohne

geschrieben 30. Mai 2008 - 10:59

Habe den Fehler gefunden.
Es lag an der Funktion.

Das EXIT hat hier aufgehört und hat den header auf der Logout garnicht beachtet. Habe es jetzt so gelöst.

logout.php
<?php
session_start();

include_once('../config/login_funktionen.php');
logout();
?>



login_funktionen.php
function logout ()
{
 $tmp_sid = session_id();
 session_destroy();

 $sql = 'UPDATE event_user_login SET UserSession = NULL WHERE UserSession = '' . $tmp_sid . ''';
 if ( mysql_query($sql) )
 {
 header('Location: ../');
 exit(mysql_error());
 }
}



Da ich im Hauptverzeichnis die index.html liegt mit den Frames erscheint beim logout der untere Frame immer wieder. Also der Header in der Funktion geht ja ins Hauptverzeichnis zurück.

Hättet ihr da noch eine Lösung bzw. ein Tipp?

index.html
<frameset  rows="100%,17" frameborder="no" framespacing="0" noresize>
<frame src="index_01.php" scrolling="auto" marginheight="0" marginwidth="0" name="index" noresize>
<frame src="footer_frame.php" scrolling="no" marginheight="0" marginwidth="0" name="unten" noresize>
</frameset>


Hättet ihr da ein Tipp?
MFG

Picard
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0