PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   $_SESSION macht Ärger im Firefox (http://www.selfphp.de/forum/showthread.php?t=17231)

Isocrateus 14.07.2007 11:35:22

$_SESSION macht Ärger im Firefox
 
Hallo!

Ich habe folgendes Problem:
(Ausschl) in Firefox wird der komplette Array $_SESSION bei der Navigation durch ein Formular gelöscht. Hierbei kann man von drei Formularseiten über einen (weiteren Formular-) Button jeweils eine Seite zurück gehen. Die Formularfelder sollten, sofern Werte gespeichert sind) die Daten aus $_SESSION direkt wieder einfügen. gelangt man wieder auf die erste Seite des Formulars wird mittels Funktion $_SESSION nach dem Einfügen der Daten geleert.
Diese Fkt - nenne wir sie mal X - wird nur auf der ersten Seite aufgerufen... Das habe ich mehrfach schon kontrolliert. Aber sobald sie irgendwo in meinem Skript auftaucht, wird $_SESSION nach jedem senden mittels $_POST gelöscht... Was ist da los? Ich versteh die session nicht mehr :-( So wird X aufgerufen:
PHP-Code:

$_SESSION delete_form_data($_SESSION); 


feuervogel 14.07.2007 11:49:57

AW: $_SESSION macht Ärger im Firefox
 
Mit diesem Code-Schnippsel kann Dir hier auch keiner weiter helfen.

Isocrateus 14.07.2007 12:11:30

AW: $_SESSION macht Ärger im Firefox
 
Na gut, das Skript sieht wie folgt aus:
PHP-Code:

function content(){
            
            
$this_form_id 14787;

                        
            
$step $_POST["step"];

                If (empty(
$step)||$step==1
                 {                        
                    
$errors check_form($_POST,$this_form_id);
                    
$form create_form($this_form_id,1,$errors);
                    
$content $form;
                    
$_SESSION delete_form_data($_SESSION);
                 }
                        
            

                If (
$step==2
                 {
                    
$errors check_form($_POST,$this_form_id);
                    
$form create_form($this_form_id,2,$errors);    

                    
$content $form;            
                 }

            

                 If (
$step==3
                 {                    
                    
$errors check_form($_POST,$this_form_id);
                    
$form create_form($this_form_id,3,$errors);
                                    
                    
$content $form;

                 }

            

                 If (
$step==4
                 {    
                    
                 }

        return 
$content;
     } 

Wobei wiederum checkform() die per post übersandten Daten in $_SESSION registriert und create_form einfac hnur dynamisch die Formularseiten erzeugt. delete_form_data($_SESSION) sieht so aus:
PHP-Code:

function delete_form_data($session){

    foreach (
$session as $var => $value){
        unset(
$session[$var]);
    }

    return 
$session;



Im Übrigen funktionierts prima in IE oder Opera...

meikel (†) 14.07.2007 16:02:44

AW: $_SESSION macht Ärger im Firefox
 
Zitat:

$_SESSION = delete_form_data($_SESSION);
Was soll der Unfug?
Das tuts auch:
PHP-Code:

$_SESSION = array(); 


Isocrateus 14.07.2007 16:16:12

AW: $_SESSION macht Ärger im Firefox
 
Okay, aber selbst wenn ich die Fkt delete usw. durch
PHP-Code:

$_SESSION = array() 

im obigen Skript ersetze, bleibt das Problem. Lösche ich allerdings auch diese Zeile heraus, funktioniert alles wie gewollt... Mit der Ausnahme, dass alle Daten aus dem Formular weiterhin gespeichert bleiben und angezeigt werden, was sie beim erneuten Aufruf natürlich nicht sollten. Würde mich sehr freuen, wenn jemandem dazu noch etwas einfällt... :-)

xabbuh 14.07.2007 18:35:26

AW: $_SESSION macht Ärger im Firefox
 
Zitat:

Zitat von Isocrateus (Beitrag 104043)
Okay, aber selbst wenn ich die Fkt delete usw. durch
PHP-Code:

$_SESSION = array() 

im obigen Skript ersetze, bleibt das Problem. Lösche ich allerdings auch diese Zeile heraus, funktioniert alles wie gewollt... Mit der Ausnahme, dass alle Daten aus dem Formular weiterhin gespeichert bleiben und angezeigt werden, was sie beim erneuten Aufruf natürlich nicht sollten.

Dann wird diese Zeile aus welchen Gründen auch immer bei jedem Seitenaufruf ausgeführt. Woran das liegt, können wir dir aber nicht sagen, solange du uns vorenthälst, wie die Zeilen um den Funktionsaufruf herum aussehen.

Isocrateus 14.07.2007 19:25:22

AW: $_SESSION macht Ärger im Firefox
 
Also check_from sieht so aus:
PHP-Code:

function check_form($post_vars,$form_id){
@
session_start();

    foreach (
$post_vars as $var => $value){
        if (
$var!="step"$_SESSION[$var] = $value;
    }


Und die Funktion content() wird in der indexdatei einfach aufgerufen per echo in einem Template ausgegeben. Da kann der Fehler nicht liegen. Im Prinzip wird sie irgendwie aufgerufen, aber kein anderes Skript auf dem Server ruft sonst irgendwo diese Funktion auf. Im Interexplorer funktionierts ja auch, der Fehler muss also irgendwo in $_SESSION selbst liegen..., oder?

meikel (†) 14.07.2007 19:42:06

AW: $_SESSION macht Ärger im Firefox
 
Zitat:

Zitat von Isocrateus (Beitrag 104043)
Okay, aber selbst wenn ich die Fkt delete usw. durch
PHP-Code:

$_SESSION = array() 

im obigen Skript ersetze, bleibt das Problem.

1. mehr als die paar Schnipsel kenne ich ja nicht
2. ebenfalls ist Deine PHP Config komplett unbekannt
3. die Ausrede, die Fehlfunktion wäre browserabhängig, kannste knicken:

27.6. Mein Script funktioniert nicht mit Browser XY!
http://www.php-faq.de/q/q-html-validieren.html

Zitat:

Würde mich sehr freuen, wenn jemandem dazu noch etwas einfällt... :-)
Mehr Script, mehr Config.

php version:___
register_globals:___
+ Deine komplette Session-Config

Welchen DOCTYPE verwendest Du?
Gibt es ein Onlinebeispiel?

Zusatz:
Deine function check_form() ist gefährlich. Besonders dann, wenn register_globals = On sein sollte.

Isocrateus 17.07.2007 21:31:12

AW: $_SESSION macht Ärger im Firefox
 
Abend!

Habe in Erfahrung gebracht, dass ich PHP 4.4.4 mit - da liegt wohl die Schwierigkeit - register_globals = on laufen habe...

Die Session-Config (wenns denn folgendes sein sollte...?) sieht folgender maßen aus:
Session Support enabled
Registered save handlers files user

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid On On

Ein Online-Beispiel kann ich leider nicht geben.
Aber mir ist schleierhaft, weshalb grundsätzlich sobald session_destroy oder $_SESSION = array() irgendwo im Skript (unabhängig von Fkt oder Schleife) auftaucht $_SESSION gelöscht bzw überschrieben wird.

Dass check_form noch sehr unsicher ist, dachte ich mir allein aufgrund der nicht verhandenen Eingabeüberprüfung schon ;-)

Doctype ist außerdem xhtml (Mekre gerade, dass ich mich garnicht auskenne - *sry*)

meikel (†) 17.07.2007 22:06:25

AW: $_SESSION macht Ärger im Firefox
 
Zitat:

Zitat von Isocrateus (Beitrag 104128)
Habe in Erfahrung gebracht, dass ich PHP 4.4.4 mit - da liegt wohl die Schwierigkeit - register_globals = on laufen habe...

Genauso isses. PHP importiert während session_start() die Variablen aus dem Session File.
Steht register_globals auf Off, ist alles in Butter. Steht das Flag auf On, importiert PHP zusätzlich noch den Inhalt von $_SESSION in den globalen Namensraum. Und genau da fangen die Probleme an, weil ja dort auch die Formularvariablen aufschlagen. Und nicht nur das: alle Variablen, die PHP exportiert hat - $_SESSION['var'] -> $var, sichert PHP dann am Scriptende auch wieder. Leider kenne ich hier die Reihenfolge nicht, ob PHP dabei die Indizes in $_SESSION mit den gleichnamigen Variablen überschreibt - oder umgekehrt.

Fazit:
schalte das Flag aus, wenn Du darfst, oder nerve die Hotline so lange, bis die es gemacht haben. Sonst hat Du nämlich sehr schlechte Karten!

Zitat:

Die Session-Config

session.bug_compat_42 On On
session.bug_compat_warn On On
Beide Flags müssen ebfalls ausgeknipst werden, wenn register_globals = Off ist.

Zitat:

session.use_trans_sid On On
Damit kann es ggf. auch Probleme geben, falls Du JavaScript verwendest. PHP versucht dann, bevor der Apache den Kram abschicken darf, an alle Links die Session Daten dranzukleben, wenn der Client keinen Keks haben wollte. Die Frage ist nur, wie intelligent sich PHP dabei anstellt, alle richtigen Stellen zu finden.
Ich bin mißtrauisch und erledige das lieber im PHP-Script unter Verwendung der PHP-Konstante SID.

Zitat:

Dass check_form noch sehr unsicher ist, dachte ich mir allein aufgrund der nicht verhandenen Eingabeüberprüfung schon ;-)
Naja, die Funktion nimmt unbesehen das, was sie kriegt.
Dazu noch register_globals = On - das ist so wie ein "Freilos für Cracker". <ggg>


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:57:12 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.