Problem mit login / check script

spikaner

Quereinsteiger @ php
So hier erstmal ein Teil vom script
login.php, sagt alles ;)
PHP:
$_SESSION["user_browser"] = $_SERVER["HTTP_USER_AGENT"];
$_SESSION["user_ip"] = $_SERVER["REMOTE_ADDR"];
$_SESSION["user_port"] = $_SERVER["REMOTE_PORT"];
$_SESSION["user_idsid"] = session_id();
check.php, wird bei jeden Seitenaufruf (interner Bereich ausgeführt)
PHP:
$browser = $_SERVER["HTTP_USER_AGENT"];
$ip = $_SERVER["REMOTE_ADDR"];
$port = $_SERVER["REMOTE_PORT"];
if(isset($_SESSION['user_id']))
    IF($_SESSION["user_ip"] != $ip)
    {
        // stirb
        session_unset (); 
        session_destroy ();
        echo '<meta http-equiv="refresh" content="0; URL=http://localhost/index.php?ac=fail&welcher=2">';
    }
// usw.
Funktioniert auch soweit, wenn ich mich jetzt aber mit 2. Browsern z.B. anmelde wird irgendwas net richtig zerstört , erst nach einen Restart des Computers kann ich mich wieder einloggen, wie kann ich das verhindern das ich den Rechner neu starten muß?

mfg Spikaner
 
[phpf]session_unset[/phpf] ist relativ obsolet und noch ein Überbleibsel aus alter Zeit.

Versuch es mal so:

PHP:
IF($_SESSION["user_ip"] != $ip)
{
	// stirb
	$_SESSION = array();
	session_destroy ();
	header('Location: http://www.domain.com/index.php', TRUE, 303);
}
 
PHP:
if(isset($_SESSION['user_id']))

Ist denn diese Bedingung erfüllt?

Davon hast uns leider kein Auszug gegeben ;)

wenn ich mich jetzt aber mit 2. Browsern z.B. anmelde wird irgendwas net richtig zerstört

Hö? ^ ^ 2 Browser von einer IP? Das da nix zerstört wird ist, nach deinem Script, richtig!
Wird ja die IP und nich der Browser geprüft.
 
Zuletzt bearbeitet:
doch hier die aktuelle check
PHP:
<?php
$browser = $_SERVER["HTTP_USER_AGENT"];
$ip = $_SERVER["REMOTE_ADDR"];
$port = $_SERVER["REMOTE_PORT"];
if(isset($_SESSION['user_id']))
{
    IF($_SESSION["user_browser"] != $browser)
    {
        $_SESSION = array();
        session_destroy ();
        header('Location: http://bla.de/game/index.php', TRUE, 303);
    }
    IF($_SESSION["user_ip"] != $ip)
    {
        $_SESSION = array();
        session_destroy ();
        header('Location: http://bla.de/game/index.php', TRUE, 303);
    }
}
?>
soweit so gut glaube ich...
sobald ich aber jetzt noch ein
PHP:
    IF($_SESSION["user_port"] != $port)
    {
        $_SESSION = array();
        session_destroy ();
        header('Location: http://bla.de/game/index.php', TRUE, 303);
    }
ins Spiel bringen will.. ist "Ende Gelände" und ich kann mich gar nicht mehr einloggen bzw werde sofort wieder gekickt, hab ich die IF falsch aufgebaut ?, bzw ich hab eben gesehen das sich der Port bei jeder Anfrage ändert. Wie kann ich trozdem Sicherstellen das sich der Port nicht bei jeden "klick" ändert ?
Sprich nur anhand der ip will ich nicht überprüfen da es ja auch ein Netzwerk etc sein kann ich will aber trozdem den Rechner erkennen (Netzwerke etc.)

mfg Spikaner

P.S. id ist vorhanden kommt aus der sql abfrage vorher wo auch IP usw. in die SESSION geschrieben wird

$_SESSION["user_id"] = $data["Id"];
kann ich evtl anhand dieser Prüfen ob der user bereits eine SESSION gestartet hat bzw eingelogt ist
 
Zuletzt bearbeitet:
Das ist das große Problem der heutigen Welt, leider kannst du den Port nicht dafür verwenden (da er von Request zu Request wechseln kann) und eigentlich auch nicht die IP Adresse, da diese sich dank Proxies und Anonymisierungsdiensten ebenfalls jederzeit ändern kann.

Was dir bleibt ist einen Mischmasch aus dem Benutzeragenten und evtl. den akzeptierten Sprachen (HTTP_ACCEPT_LANGUAGE) zu nutzen.
Einen Benutzer 100%ig zu identifizieren wird dir nicht möglich sein.
 
Hmm, dann hab ich die 1000 Euro Frage ;) , wie kann ich dann einen SESSION klau bzw. multi am besten unterbinden?
mithilfe der db und nen cronjob arbeiten?
Falls User mit selber ID bereits eingelogt (0 , 1 in db) usw oder wie stell ich das am "dümmsten" an

mfg Spikaner

P.S. Ja es handelt sich um ein Browsergame und ich mache es nur um Fit in PHP zu werden irgend ein Ziel muß man sich ja stecken..
 
Zuletzt bearbeitet:
Hier hab ich mal eine Sammlung von Ideen aus dem dortigen Thread gemacht:
http://www.tutorials.de/forum/1649362-post14.html

Bei sowas wie deinem kann HTTP_REFERER recht nützlich sein.

Ich hab mir den Beitrag mal angesehen und habe beschlossen das ganze mit cookies
handzuhaben. Was sollte ich alles in das Cookie schreiben und. wie überprüfe ich es am dümmsten? Blöde Frage aber ich hatte bis jetzt nie was mit cookies am Hut und nen vernünftiges Tut. hab ich auch niergens gefunden.
Hat evtl. jemand nen Codeschnipsel für mich?
1. Wie überprüfe ich ob cookies erlaubt sind?
2. Wie setze ich es?
3. Was gehöhrt als minimum rein (dachte dan an die User Id bzw den Usernamen + )?

mfg Spikaner
 
hi,

naja cookies sind recht einfach, sind fast gleich $_SESSION würd ich jetzt mal sagen, setzen kannst du das mittes:

PHP:
setcookie('cookiename', 'wert', 'gültigkeit', 'pfad', 'domain', usw...)

mehr infos darüber findest du auf php.net -> http://www.php.net/manual/de/function.setcookie.php

was du drinne speichern sollst, naja, bei nem loginsystem wäre wohl das wichtigste die userid und sein passwort oder sonst irgend ein randomkey, damit der user später automatisch eingeloggt wird. hier mal ein beispiel:


PHP:
setcookie('_uid', '1', time()+3600);
setcookie('_pass', '36a3d7fad57dc3454061b0b915e7d14e', time()+3600);

du kannst da natürlich noch mehr mit anstellen, als erstes machst du eine abrage ob cookies existieren, falls ja überprüfe die werte mit den inhalten in der db, falls cookies nicht existieren steigste auf session um genauso wenn die werte in der db nicht existieren.

eine abfrage könnte so aussehen:

PHP:
if(isset($_COOKIE['_uid']) && ($_COOKIE['_pass'])) {											
  		$cid = $_COOKIE['_uid'];											
		$cpass = $_COOKIE['_pass'];
			loginstatus($cid, $cpass);
}

sollten allerdings die werte stimmen musste dir was basteln woran dein script erkennt das der user eingeloggt ist. ich hab das zb so gemacht das ein user wenn die werte in den cookies mit denen in der db übereinstimmen die aktuelle sessionid in die db bekommt und das script später immer nur überprüft ob der user ne eingetragene session id hat.

ich hoffe du konntest mir soweit folgen.

mfg lolox
 
Zurück