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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 05-01-2011, 13:20
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
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: 584
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)
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: 890
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.471
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: 890
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.471
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: 890
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.471
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: 890
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.471
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: 890
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.471
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: 890
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.471
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: 890
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, jQuery, CSS, Bootstrap, LESS 1 26-07-2007 13:14
[CSS] Problem mit float und table unter Safari Jumble HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 5 01-04-2007 18:59
CSS Problem mit FF und Opera Sebiii HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 2 07-02-2006 07:42
[CSS] Problem mit Links im Safari Browser coarsy HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:33 Uhr.