brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 05-01-2011, 13:20
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard SESSION Problem mit Safari / Opera

hi,
ich habe folgendes Problem:
ich will mir ein auf einer Seite ein User Login - Logout bauen.
Frage in ner DB den User ab - kann er sich identifizieren wird die SESSION Variable logged auf true gesetzt.
Beim Ausloggen dann entsprechend auf false.
Habe eine index.php mit langer switch abfrage - je nach case wird dann der content angezeigt.
Klappt soweit auch - aber bei Opera und Safari habe ich denn effekt das ich nach dem auslogen geschützte Bereiche zwar nicht direkt an anwählten kann da $_SESSION['logged'] richtig abgefragt wird, beim navigieren mit dem Backbutton aber schon.
Lasse ich mir $_SESSION['logged'] ausgeben wird beim navigieren mit dem Backbutton nach einem Ausloggen im FF und IE korrekt $_SESSION['logged'] = false angezeigt, bei Safari & Opera aber true.
Mal einen Auzug aus dem Code:
PHP-Code:
session_start();
if(!isset(
$_SESSION['logged'])){
   
$_SESSION['logged'] = false;
}
if(!isset(
$_GET['action']))    {    
   include(
"x_inc/start.php");
}else if(!
$_SESSION['logged']){
   switch(
$_GET['action']){
     case 
"login":    
        if(
login()){// Datenbank Abfrage fürs einloggen
           
$_SESSION['logged'] = true;
           
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?action=secure"true302); 
        }else{
          
$message "Fehler beim einloggen";
          include(
"x_inc/error.php");
        }                
        break;
     case 
"confirmReg":// Anmeldung
       
if(confirmReg()){// wenn user sich registrieren konnte
         
$_SESSION['logged'] = true;
         
$message .= "<p>bist drine</p>";
         include(
"x_inc/secure.php");
       }else{
         
$message "Fehler beim Registrieren";
         include(
"x_inc/error.php");
       }
       break;
     default: include(
"x_inc/default.php");
  }
}else if(
$_SESSION['logged']){
   switch(
$_GET['action']){
     case 
"secure":
        
$message .= "<p>logged in</p>";
        include(
"x_inc/secure.php");
        break;
     case 
"logout":
        
$_SESSION['logged'] = false;
        
$_SESSION = array();
        
session_destroy();
        
header("Pragma: no-cache");
        
header("Cache-Control: no-store, no-cache, must-revalidate");      
        
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
        
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?action=loggedOut"true302); 
        break;
     default: include(
"x_inc/default.php");
  }
// switch cascade

Wie zerstöre ich die SESSION so das es auch Opera / Safari mitbekommen?

Schon THX in Advance....
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #2 (permalink)  
Alt 05-01-2011, 13:30
Skaschy
 Registrierter Benutzer
Links : Onlinestatus : Skaschy ist offline
Registriert seit: Jun 2002
Ort: Bad Wörishofen (Allgäu)
Beiträge: 582
Skaschy ist zur Zeit noch ein unbeschriebenes Blatt
Skaschy eine Nachricht über ICQ schicken
Standard

PHP-Code:
$_SESSION['logged'] = false;
$_SESSION = array(); 
Macht schonmal keinen Sinn, da nach dem

PHP-Code:
$_SESSION = array(); 
PHP-Code:
$_SESSION['logged'
gar nicht mehr verfügbar ist (undefined)
__________________
Gruss TobY
Mit Zitat antworten
  #3 (permalink)  
Alt 05-01-2011, 13:49
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Hi Skaschy,
hast natürlich recht, hatte $_SESSION['logged'] = false; auch nur mal reingeschrieben um sicherzugehen das beim ausloggen $_SESSION['logged'] wirklich false ist....

Meine Frage bleibt aber: warum zeigen Safari/Opera beim navigieren mit dem Backbutton falsche werte an?
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #4 (permalink)  
Alt 05-01-2011, 14:24
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ich habe mir deinen Code nicht angesehen, aber entweder wird das Session-Cookie in den betreffenden Browsern nicht gelöscht oder die laden die Seiten nicht vom Server sondern aus ihrem Cache. Beides lässt sich recht einfach überprüfen.
Mit Zitat antworten
  #5 (permalink)  
Alt 05-01-2011, 14:28
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Hi OneMoreNerd,
lasse mir die Session Werte ausgeben - im FF werden sie gelöscht, im Safari nicht.
Beseitige die Session beim ausloggen mit:
$_SESSION = array();// $_SESSION leeren
session_destroy();// Session zerstören

und den Cache mit:
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

Gibt es für Safari /opera sonst noch was zu beachten?

Ach ja, in SelfHtrml gibt es ein Beispiel http://aktuell.de.selfhtml.org/artikel/php/loginsystem/, da tritt das gleiche Problem auf
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #6 (permalink)  
Alt 05-01-2011, 14:54
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Das Caching verbietest du aber nur für die Seite, wo man sich ausloggt. Die früheren Seiten sind evtl. trotzdem gecacht.
Mit Zitat antworten
  #7 (permalink)  
Alt 05-01-2011, 14:56
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

es wird aber nur die index.php aufgerufen
da gibt es eine switch cascade - je nach case include ich mir dann den content
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #8 (permalink)  
Alt 05-01-2011, 14:59
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ja und nur im Logout-Case verbietest du Caching.
Hast du mal getestet, ob die Seiten beim Zurückblättern wirklich vom Server abgerufen werden?
Mit Zitat antworten
  #9 (permalink)  
Alt 05-01-2011, 15:06
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Hi,
seiten werden aus dem Cache geholt - Backbutton geht auch ohne Verbindung zum Server.

Habe den Cache Block mal ganz nach oben in die index.php gestellt - keine Veränderung
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #10 (permalink)  
Alt 05-01-2011, 19:03
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Hast du nach dieser Änderung auch mal deinen Browsercache geleert?
Werden auf allen Seiten die erwarteten Header gesendet?
Wie sieht dein Code aktuell aus?
Mit Zitat antworten
  #11 (permalink)  
Alt 05-01-2011, 19:23
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Erstmal: THX OneMoreNerd für deine Hilfe
Cache habe ich geleert
Hier der Antwort Header von Safaris Entwickler Tool:
PHP-Code:
Cache-Control:max-age=0post-check=0pre-check=0
Connection
:Keep-Alive
Content
-Encoding:gzip
Content
-Length:894
Content
-Type:text/htmlcharset=UTF-8
Date
:Wed05 Jan 2011 18:15:34 GMT
Expires
:-1
Keep
-Alive:timeout=1max=99
Last
-Modified:Wed05 Jan 2011 18:15:34 GMT
Pragma
:no-cacheno-cache
Server
:Apache
Vary
:Accept-Encoding
X
-Powered-By:PHP/5.2.12-nmm2 
meine aktuellen PHP Header ganz oben in meiner index.php:
PHP-Code:
header("Content-type: text/html; charset=UTF-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
header("Expires: -1");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"true);   // immer ge&auml;ndert
header("Cache-Control: no-store, no-cache, must-revalidate"true);  // HTTP/1.1
header("Cache-Control: max-age=0, post-check=0, pre-check=0"true);
header("Pragma: no-cache"false);    // HTTP/1.0 
und die meta aus dem Html Bereich:
PHP-Code:
<meta http-equiv="expires" content="0" />
<
meta http-equiv="cache-control" content="no-cache" />
<
meta http-equiv="pragma" content="no-cache" /> 
Wie gesagt, ich kann (nach einem LogOut) mit dem Back Button zurück navigieren, wenn ich dann die Seite aktualisiere wird mir richtig angezeigt das ich ausgeloggt bin.
Das gilt für Safari & Opera
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #12 (permalink)  
Alt 06-01-2011, 00:33
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Hast du gemerkt, dass es sinnlos ist, den selben Header mehrfach zu setzen?
Hast du getestet, ob die Header das gewünschte bewirken, die Seiten also nicht gecacht werden?
Mit Zitat antworten
  #13 (permalink)  
Alt 06-01-2011, 09:59
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Hast du gemerkt, dass es sinnlos ist, den selben Header mehrfach zu setzen?
Meinst du z.B.
header("Pragma: no-cache", false); // HTTP/1.0
und
<meta http-equiv="pragma" content="no-cache" />
?
Ich probiere eunfach diverse Tipps aus die im beim Googeln finde.
Laut PHP: header - Manual
Sollte das hier ja ausreichen
PHP-Code:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit 
Tut es aber (in Safari / Opera) nicht...

Zitat:
Hast du getestet, ob die Header das gewünschte bewirken, die Seiten also nicht gecacht werden?
In FF, IE und Chrome funktioniert der test - oder hast du noch eine andere Vorgehens weise zum Testen - Wie kann ich denn mit den Safari Entwickler Tools (oder auch Firebug) sehen ob er sich ne Seite aus dem Cache holt oder vom Server?

BTW:
Hatte auch länger nix mehr mit PHP gemacht und muß mich wieder einfuchsen
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #14 (permalink)  
Alt 06-01-2011, 16:05
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ich meinte eigentlich sowas:
PHP-Code:
header('Expires: ...');
header('Expires: ...'); 
Es wird nämlich nur der zuletzt gesetzte Header jeden Typs (der Typ ist der String vor dem Doppelpunkt) zum Client geschickt.
Und wenn du die Header mit PHP setzen kannst, brauchst du keine Meta-http-equiv-Tags mehr. Die sind mal irgendwann eingeführt worden, als Webseiten noch statische HTML-Dateien waren. Solche Tags werden vom Browser ignoriert, wenn der selbe Header als echter HTTP-Header empfangen wurde.

Um zu prüfen ob eine Seite aus dem Cache kommt, brauchst du nur einen Zeitstempel z.B. von time() in die Seite zu schreiben. Seite laden, Zeitstempel merken, nächste Seite laden, Sekunde warten, Back-Button klicken und Zeitstempel mit dem gemerkten vergleichen. Bei Gleichheit ist die Seite aus dem Cache gekommen.
Mit Zitat antworten
  #15 (permalink)  
Alt 06-01-2011, 16:46
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 888
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

THX,
da hatte ich mich mit Headern verlesen:
Zitat:
Der optionale Parameter replace gibt an, ob der Header einen vorhergehenden gleichartigen Header ersetzten soll, oder ob ein zweiter Header des selben Typs hinzugefügt werden soll. Standardmäßig wird ersetzt; wenn Sie als zweites Argument FALSE übergeben, können Sie so mehrere Header desselben Typs erzwingen. Zum Beispiel:
habe ich jetzt auf false gesetzt

Habe auch mal mit Timestamp geprüft (ich Hirnbär ):
bei FF und Co. werden die Seiten neu geholt - bei Safari & Opera aus dem Cache geholt

Html - Header habe ich rausgenommen und meine php Header sehen gerade so aus:
PHP-Code:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"false);    // Datum aus Vergangenheit
header("Expires: -1"false);
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"true);   // immer ge&auml;ndert
header("Cache-Control: no-store, no-cache, must-revalidate"false);  // HTTP/1.1
header("Cache-Control: max-age=0, post-check=0, pre-check=0"false);
header("Pragma: no-cache"true);    // HTTP/1.0 
werde nochmal alle Kombinationen mit Safari testen....
THX
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
RSS Problem mit MAC Safari frank7l7 PHP Developer Forum 2 03-12-2008 09:40
IE7 & Opera Problem mit CSS Tiger_XT HTML, JavaScript, AJAX und CSS 1 26-07-2007 13:14
[CSS] Problem mit float und table unter Safari Jumble HTML, JavaScript, AJAX und CSS 5 01-04-2007 18:59
CSS Problem mit FF und Opera Sebiii HTML, JavaScript, AJAX und CSS 2 07-02-2006 07:42
[CSS] Problem mit Links im Safari Browser coarsy HTML, JavaScript, AJAX und CSS 8 22-10-2004 15:54

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
belbit LiveSupport Script ansehen belbit LiveSupport Script

Schnellen und unkomplizierten Support im LiveSupport-Chat anbieten. Ohne Datenbank und in wenigen Sekunden installiert.

24.05.2012 EichbaumMedia | Kategorie: PHP/ Chat
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:18 Uhr.