PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : login mit cookies



pousty
21.06.2010, 12:52
hallo,
ich betreibe eine website mit login. wenn man sich einloggt wird ein cookie gesetzt damit man eingeloggt bleibt.

folgendes problemchen:
immer wenn man sich einloggt wird man ordentlich zum loginbereich weitergeleitet, ABER klickt man nun auf einen menepunkt in der navigation wird man wieder gekickt. loggt man sich dann nochmals ein funktioniert alles wieder wie es soll.
loescht man cookies und schließt den browser wird man wieder beim ersten loginversuch gekickt wenn man auf irgendeinen menuepunkt klickt.

woran liegt das und wie kann man das beheben?

danke
mfg pousty

Apex
21.06.2010, 13:29
Also das Problem kenne ich nur, wenn immer unbeabsichtigte neue Sessions zugeteilt werden. Benutzt du Sessions? Vielleicht kannste uns ja mal deine login.php hier posten.

Ken
21.06.2010, 13:37
Schreib doch einfach mal den Quellcode rein, sonst kann man Dir nur schwerlich helfen. Aber dass man nicht eingeloggt bleiben kann, wenn die Cookies gelöscht werden, ist Dir hoffentlich klar, oder?

Zu beachten ist auch der Zeitstempel, der angibt, wie lange das Cookie gültig ist, da es sonst zu schnell verfallen könnte:

setcookie("bla", "blub", 99999999999);

kalachnikov
21.06.2010, 13:56
bzw. so


setcookie('name_des_cookies', $_POST['username'].'[:::]'.$_POST['password'], time() + 6000);

pousty
21.06.2010, 13:59
hier ist alles aus der login.php

<?php
if ( empty( $_COOKIE['testcookie'] ) )
{
$test = rand(2,999999999);
$test1 = rand(2,999999999);
$test2 = rand(2,999999999);
$testcookie = $test+$test1+$test2;
setcookie("testcookie", $testcookie, time()+60*60*24*30, "/", "$server_name", 0);
}


$werber = $_GET['ref'];
if ($werber != ""){

if(is_numeric($werber)){
include("include/connect/connect.php");
$wxdaten1=mysql_query("SELECT username FROM user_daten WHERE id='$werber'");
$wxdaten=mysql_fetch_array($wxdaten1);
if(mysql_num_rows($wxdaten1)==1){$werber = $wxdaten[0];}
}

if ( empty( $_COOKIE["geworbenvon"] ) ){
setcookie("geworbenvon", $werber, time()+60*60*24*30, "/", "$server_name", 0);
}else{
$werbertest=$_COOKIE["geworbenvon"];
if ($werbertest != $werber){
setcookie("geworbenvon", $werber, time()+60*60*24*30, "/", "$server_name", 0);
}}}

$path = $_SERVER['DOCUMENT_ROOT'];
include("$path/include/connect/connect.php");


$loginuid=md5($username);
$projektdatena = mysql_query("SELECT * FROM einstellungen");
$projektdaten=mysql_fetch_array($projektdatena);


if(isset($_POST["passwort"]) and isset($_POST["username"])) {
$username=$_POST["username"];
$passwort=$_POST["passwort"];
$aktiviert="0";
$gesperrt="1";



$query="select * from user_daten where username='".$username."'";
$result=mysql_query($query);
$row=mysql_fetch_object($result);
$data = mysql_fetch_array ($result);


if(!$row) {
header ("Location: /user/loginfail.php?fail=0");
}
else
if (md5($passwort)!=$row->passwort or $username!=$row->username) {

header ("Location: /user/loginfail.php?fail=1");


}
else
if($aktiviert==$row->aktiviert){
header ("Location: /user/loginfail.php?fail=2");
}
else
if($gesperrt==$row->gesperrt){
header ('Location: /user/loginfail.php?fail=3');
setcookie("loginuid", $loginuid, time()-3600, "/", "$server_name", 0);

}
else
{
header ('Location: /user/loginbereich.php');
$loginuid=md5($username);
setcookie("loginuid", $loginuid, time()+3600, "/", "$server_name", 0);


$letzteaktion = time();
$ip = $_SERVER['REMOTE_ADDR'];

if ( empty( $_COOKIE['testcookie'] ) )
{
header ('Location: /user/loginbereich.php');
$test = rand(2,999999999);
$test1 = rand(2,999999999);
$test2 = rand(2,999999999);
$testcookie += $test1+$test2;
setcookie("testcookie", $testcookie, time()+60*60*24*30, "/", "$server_name", 0);
mysql_query("update user_daten set loginuid='$loginuid', ip='$ip', testcookie='$testcookie', letzteaktion='$letzteaktion' where username='$username'");
}else{
$testcookie = $_COOKIE["testcookie"];
mysql_query("update user_daten set loginuid='$loginuid', ip='$ip', testcookie='$testcookie', letzteaktion='$letzteaktion' where username='$username'");

}


$userdaten1=mysql_query("select * from user_daten WHERE loginuid='$loginuid'");
$userdaten=mysql_fetch_array($userdaten1);

$iptest = mysql_query("SELECT * FROM user_daten WHERE ip='$ip' && username!='$username'");
if(mysql_num_rows($iptest) > 1) {
$letzteaktion = time();
$userid==$row->id;
$grund = "Doppelte IP beim Login";
mysql_query("insert into fakeliste (userid,username,ip,wann,grund) values ('$userdaten[id]','$userdaten[username]','$ip','$letzteaktion','$grund')");
}


$cookietest = mysql_query("SELECT * FROM user_daten WHERE testcookie='$testcookie' && username!='$username'");
if(mysql_num_rows($cookietest) > 1) {
$letzteaktion = time();
$userid==$row->id;
$grund = "Doppeltes Pr�fcookie beim Login";
mysql_query("insert into fakeliste (userid,username,ip,wann,grund) values ('$userdaten[id]','$userdaten[username]','$ip','$letzteaktion','$grund')");
}



}}



echo"


<div id='loginlinks'></div>
<div id='login'>
<form method='POST' action='/user/login.php' style='float:left;'>


<div style='margin-top:15px; margin-left:5px'>
<b>Login:</b>
<br>



<div style=\"font-size:10px; margin-top:10px;\">
<input type=\"text\" size=\"20\" maxlength=\"20\" id=\"mockuser\" name=\"username\" value=\"Benutzername\" onFocus=\"document.getElementById('mockuser').style.display= 'none'; document.getElementById('realuser').style.display= ''; document.getElementById('realuser').focus();\">

<input type=\"text\" size=\"20\" name=\"username\" id=\"realuser\" class=\"real\" style=\"display: none;\" onBlur=\"if(this.value=='') {document.getElementById('mockuser').style.display =''; document.getElementById('realuser').style.display= 'none';}\">
</div>



<div style=\"font-size:10px; margin-top:5px;\">
<input type=\"text\" size=\"20\" id=\"mockpass\" name=\"mock\" value=\"Passwort\" onFocus=\"document.getElementById('mockpass').style.display= 'none'; document.getElementById('realpass').style.display= ''; document.getElementById('realpass').focus();\">

<input type=\"password\" size=\"20\" name=\"passwort\" id=\"realpass\" class=\"real\" style=\"display: none;\" onBlur=\"if(this.value=='') {document.getElementById('mockpass').style.display =''; document.getElementById('realpass').style.display= 'none';}\">
</div>
<div style='margin-top:7px;'>
<input type='image' src='$projekturl/images/login_03.png' style='border:0 none;' name='submit'>
</div>

</div>
</form>
</div>
";
?>

p.s. haette ich den code in php brackets gepostet haette er mir den gekuerzt..wollte mehrere posts vermeiden.

fred777
21.06.2010, 15:16
Mal abgesehen vom schlechten Code und den ganzen SQL Injections, sollte das Cookiehandling funktionieren. Vielleicht stimmt etwas mit deiner loginbereich.php nicht...

Apex
21.06.2010, 15:52
Ja ist mir im nachhinein aufgefallen, dass der Code ziemlich schlecht gecodet ist. Schaut bissl zusammengewürfelt aus. Poste mal alle PHP DAteien die was mit dem Login zutun haben, bzw die included oder derartiges sind.

pousty
21.06.2010, 17:34
Problem gelöst..ne variable bei setcookie war falsch definiert..danke für eure hilfe :) werde den code versuchen zu verbessern..aber wie kann ich denn vor injections schuetzen? meint ihr die tabellen namen anders benennen oder wie habt ihr das gesehn?

err000r
23.06.2010, 21:50
wenn ich deinen beitrag so lesen, dann solltest du entweder dir j0hnys tut durchlesen (J0hn.X3r :: Tutorials (http://j0hnx3r.org/?cat=8))
der rest schade sicher auch nicht.

so ganz grob sage ich mal: filter alles, was vom user kommt.
dazu hat fred ein mehr oder weniger gutes system auf seinem blog, das tut seinen zweck
das pfeist dir hier rein -= fred777 =- (http://peterlustig.pytalhost.com/index.php?s=8&id=8)

viel spass