COOKIE login klappt nicht -.-
fregge
- php
Hey
Folgende Methoden:
~~~php
/**
* Der technische Login, setzt Cookie, Session, Datenbank
*/
private function _setLoginStatus($name,$id,$time,$model,$bids){
// Values
$values=array(
'u_id'=>$id,
'u_name'=>$name
);
// Create Hash
$values['key']=sha1($values['u_id'].'|'.$values['u_name'].'|'.self::$cookiesalt);
// Create Cookie-String
$string=implode('|',$values);
# COOKIE // Save Cookie
if(setcookie('u',$string,time()+321408000)===false){
return false;
}
# MEM // Save Key to memcached
$userkey='u_'.$id.'_key';
if(!mem::get($userkey)){
mem::set($userkey,$values['key']);
}else{
mem::replace($userkey,$values['key']);
}
return true;
}
/**
* Checks if Cookie avaiable and not manipulated
*/
private function _checkCookie(){
#tools::ga($_COOKIE);exit();
if(isset($_COOKIE[self::$cookiename])){
$s=explode('|',$_COOKIE[self::$cookiename]);
// Cookie manipulated?
if(sha1($s[0].'|'.$s[1].'|'.self::$cookiesalt)===$s[2]){
return array($s[2],$s[0],$s[1]);
}else{
setcookie(self::$cookiename,'',time()-36000);
return array(false,$s[0]);
}
}
return false;
}
/*
* Authentifizieren
*/
public function Auth(){
if($keyIdName=$this->_checkCookie()){
if($keyIdName[0]===mem::get('u_'.$keyIdName[1].'_key')){
self::$uname=$keyIdName[2];
self::$uid=$keyIdName[1];
self::$status=true;
}else{
self::$uname='';
self::$uid=0;
self::$status=false;
mem::delete('u_'.$keyIdName[1].'_key');
}
}
\_setLoginStatus wird von einer Methode namens "Login()" aufgerufen.
Die Parameter werden alle richtig pbergeben und auch checkUsers() liefert das richtige Ergebnis zurück.
Auch das Cookie wird gesetzt, nach dem setLoginStatus wird ein PHP-Redirect durchgeführt
~~~php
header('Status: 301');
header('Location: /');
exit();
Danach ist der Cookie nicht mehr da - warum?
moin,
Danach ist der Cookie nicht mehr da - warum?
Wie "nicht mehr da"? Hat der Browser den Cookie gespeichert oder nicht? Sendet der Browser den Cookie?
1. im Browser nachschauen
2. prüfe den Parameter path
Hotti
Wie "nicht mehr da"? Hat der Browser den Cookie gespeichert oder nicht? Sendet der Browser den Cookie?
Ja er wird gespeichert, er existiert nach der Weiterleitung auch noch. Erst wenn der Dispatcher das nächste mal user_call_function aufruft, verschwindet das Cookie. Einfach weg.
Hi!
Wie "nicht mehr da"? Hat der Browser den Cookie gespeichert oder nicht? Sendet der Browser den Cookie?
Ja er wird gespeichert, er existiert nach der Weiterleitung auch noch. Erst wenn der Dispatcher das nächste mal user_call_function aufruft, verschwindet das Cookie. Einfach weg.
Bitte beobachte und beschreibe genauer. Wie stellst du fest, dass der Keks da ist beziehungsweise nicht mehr da ist? Welcher HTTP-Verkehr ist in der Zwischenzeit zwischen Server und Browser gelaufen, wobei die cookie-relevanten Teile interessieren (Set-Cookie)?
Du berücksichtigst auch, dass Cookies immer erst einen Request nach dem setcookie() in $_COOKIE zur Verfügung stehen?
Lo!
Hi.
Bitte beobachte und beschreibe genauer. Wie stellst du fest, dass der Keks da ist beziehungsweise nicht mehr da ist? Welcher HTTP-Verkehr ist in der Zwischenzeit zwischen Server und Browser gelaufen, wobei die cookie-relevanten Teile interessieren (Set-Cookie)?
Es geht um das Cookie mit dem Namen "u".
Hier! Da sieht man es, es wird gesetzt:
HTTP/1.1 302 Found
Date: Fri, 09 Jul 2010 10:07:17 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1
X-Powered-By: PHP/5.3.1
Accept-Charset: utf-8;q=0.7,*;q=0.7
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: user[lang]=de; expires=Sun, 08-Sep-2013 19:53:56 GMT
Set-Cookie: u=4%7Ctest%7Cd80a27aa8740b0f9570e8c0cde223ed761219d46; expires=Mon, 14-Sep-2020 10:07:17 GMT
Status: 301
Location: http://winila/
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
----------------------------------------------------------
http://winila/
GET / HTTP/1.1
Host: winila
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 GTB7.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://winila/
Cookie: user[lang]=de; USERAUTH=91fc005f257a777860689b111fa5a17c; PHPSESSID=m9hkpsa4ohma2i19feo6ljip01
Du berücksichtigst auch, dass Cookies immer erst einen Request nach dem setcookie() in $_COOKIE zur Verfügung stehen?
Ja.
Es ist einfach nicht mehr da...
Moin!
Es ist einfach nicht mehr da...
Oft liegt an Verlinkungen mit absoluten Adressen.
http://www.example.com/seite.php und example.com/seite.php sind, was Cookies betrifft, "nicht ganz" das selbe. Könnten ja verschiedene Server sein.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Nein die Verlinkung geht einfach nach / - also Root, wo auch das Login-Formular ist.
Moin!
Nein die Verlinkung geht einfach nach / - also Root, wo auch das Login-Formular ist.
MFFG (Mit freundlich- friedfertigem Grinsen)
Schmeiß spaßeshalber mal den Status 301 raus oder ersetze den durch 302.
fastix
Schmeiß spaßeshalber mal den Status 301 raus oder ersetze den durch 302.
Unverändert. Es bleibt immernoch nicht stehen und ich weiß echt nicht mehr weiter.
lg
hi,
HTTP/1.1 302 Found
Das ist schonmal Müll, guck Dir an was geht in Sachen Status.
Set-Cookie: u=4%7Ctest%7Cd80a27aa8740b0f9570e8c0cde223ed761219d46; expires=Mon, 14-Sep-2020 10:07:17 GMT
Ja ok, wird der auch gespeichert?
Cookie: user[lang]=de; USERAUTH=91fc005f257a777860689b111fa5a17c; PHPSESSID=m9hkpsa4ohma2i19feo6ljip01
Dein Cookie Named "u" wird nicht gesendet. Prüfe die Parameter domain (danke fastix) und path.
Hotti
Alles klar, es lag an path. So ein Anfängerfehler. Wie dumm einfach. Danke Leute.
Alles klar, es lag an path. So ein Anfängerfehler.
Sag das nicht. Wenn Du wüsstest, was manchmal im Profibereich für Fehler gemacht werden ;-)
Hottü
Hi,
Es geht um das Cookie mit dem Namen "u".
Hier! Da sieht man es, es wird gesetzt:HTTP/1.1 302 Found
[...]
Set-Cookie: u=4%7Ctest%7Cd80a27aa8740b0f9570e8c0cde223ed761219d46; expires=Mon, 14-Sep-2020 10:07:17 GMT
Status: 301
Wenn hier dein selbst gesetzter Status-Header mit dem Wert 301 noch mal auftaucht, obwohl ganz oben HTTP/1.1 302 Found als der letztendlich verwendete Statuscode steht - dann sollte dir doch wohl hier auffallen, dass dein eigener Header irgendwie Murks war.
Location: http://winila/
Wo der herkommen soll, ist auch rätselhaft.
In deinem Code hattest du den Wert "Location: /" verwendet, was übrigens definitiv falsch ist.
Und wenn "winila" der Hostname ist, über den du testest - hast du bedacht/dich informiert, dass es bei solchen Hostnamen und Cookies insb. bei der Verwendung des IE immer wieder Probleme gibt?
MfG ChrisB