autologin per cookie
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
action
anzahl
autologin
beitrag
count
datei
daten
fan
funktion
login
null
pa
result
schauen
session
set
test
update
vergleichen
versuchen
-
ich arbeite atm an einem portal. der login sowie einige weitere skripte funktionieren bereits. ich habe nun versucht eine autologin funktion per cookie einzubauen, nur funktioniert diese noch nicht so recht. der cookie wird beim ie garnicht erst gesetzt und mit firefox funktioniert es auch nicht.
hier die login.php:
if(!isset($_COOKIE['wiwpi'], $_SESSION['id']) AND isset($_GET['action']) AND $_GET['action']=="login") {
//kein cookie, daten ?ber loginformular ?bergeben
if($userid=login_check($_POST['nickname'], $_POST['pass'])) {
$_SESSION['id']=$userid;
$_SESSION['ip']=$_SERVER['REMOTE_ADDR'];
if(isset($_POST['autologin'])) {
$cookiedaten=array($_SESSION['id'], md5($_POST['pass']));
$cookiedaten=serialize($cookiedaten);
setcookie('wiwpi', $cookiedaten, time()+2592000);
}
$sql="UPDATE user
SET
lastlogin=NOW()
WHERE
id='".$_SESSION['id']."';";
mysql_query($sql) or die(mysql_error());
} else {
$smarty->assign('login_false', true);
}
} elseif(isset($_COOKIE['wiwpi']) AND $userid=login_check()) {
//cookie gesetzt, ?berpr?fen ob session existiert
if(!isset($_SESSION['id'])) {
session_start();
$_SESSION['id']=$userid;
$_SESSION['ip']=$_SERVER['REMOTE_ADDR'];
$sql="UPDATE user
SET
lastlogin=NOW()
WHERE
id='".$_SESSION['id']."';";
mysql_query($sql) or die(mysql_error());
}
}
und hier die funktion login_check:
function login_check($nickname = NULL, $pass = NULL) {
if(isset($_COOKIE['wiwpi'])) {
$cookie_inhalt=stripslashes($_COOKIE['wiwpi']);
$cookie_inhalt=unserialize($cookie_inhalt);
$cookie_userid=$cookie_inhalt[0];
$cookie_pass=$cookie_inhalt[1];
$sql="SELECT
COUNT(*) as anzahl
FROM user
WHERE
id='".$cookie_userid."' AND
password='".$cookie_pass."' AND
activ='1';";
$result=mysql_query($sql) or die(mysql_error());
$row['anzahl']=mysql_fetch_assoc($result);
return $cookie_userid;
} else {
$sql="SELECT
COUNT(*) as anzahl
FROM user
WHERE
nick='".$nickname."' AND
password='".md5($pass)."' AND
activ='1';";
$result=mysql_query($sql) or die(mysql_error());
$row=mysql_fetch_assoc($result);
if($row['anzahl']) {
$sql="SELECT
id
FROM user
WHERE
nick='".$nickname."';";
$result=mysql_query($sql) or die(mysql_error());
$userid=mysql_fetch_assoc($result);
return $userid['id'];
} else {
return false;
}
}
}
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi
Dir ist klar, dass die funktion "setcookie()" gaaaaaaaaanz nach oben muss? Wenn ja, versuch mal den Cacke von deinem Browser zu l?schen, oder guck nach, ob dein Browser Cookies zul?sst...
b2k-fan
//edit by b2k-fan
Ich meinte nat?rlich "Cache" nickt "Cacke"...
Beitrag ge?ndert am 21.12 14:26 von b2k-fan
Hab nochmal geeditet!
Beitrag ge?ndert am 21.12 14:39 von b2k-fan -
die datei login.php ist mit ob_push "ausgeklammert".
an meinen cookieeinstellung liegt es nicht, da alle nutzer des portals das problem haben. au?erdem funktioniert der cookie von lima city beispielsweise einwandfrei. -
if(!isset($_COOKIE['wiwpi'], $_SESSION['id']) AND ..........
ich hoffe schon sehr, dass du die Session gestartet hast, bevor du ?berpr?fst, ob die Variable gesetzt ist
MfG Asmodeus -
ja, die session wird vorher gestartet. der normale login funktioniert ja auch schon, nur der autologin eben noch nicht
-
Versuch mal, den Cookie einfach so zu setzen und dann auszugeben
setcookie('test', 'TEST-USER', time()+3600); print_r($_COOKIE);
und schau dann ob dieser Cookie gesetzt ist...
^^^^
...elseif(isset($_COOKIE['wiwpi']) AND $userid=login_check()) {...
richtig w?re wohl eher
...elseif(isset($_COOKIE['wiwpi']) AND $userid==login_check()) {...
wobei das der falsche fehler sein d?rfte
MfG Asmodeus
Beitrag ge?ndert am 21.12 16:55 von asmodeus -
ne daran k?nnt liegen obei das alles zusammen in ne klammer muss und glaub ich nich and sonder && oder so, desweiteren muss das coocie-setzen die allererste ausgabe des scripts sein!
-
elseif(isset($_COOKIE['wiwpi']) AND $userid=login_check())
ist korrekt, da es sich hierbei um eine zuweisung handelt, und nicht um einen vergleich.
@vorposter
wie schon gesagt, mit der funktion ob_push wird die seite gecached und erst der header erst gesendet wenn im code das "ende" der funktion erreicht ist. dies erm?glich cookies auch "weiter unten" im code zu setzten -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage