Hallo,
mit Frames habe ich auf verschiedenen Installationen ein unterschiedliches Verhalten bekommen, das ich mir nicht erklären kann:
In der Framesetdatei setze ich eine Session-Variable.
Im ersten Frame verwende ich sie.
Im zweiten Frame verwende ich sie ebenfalls.
Ergebnis: Auf zwei Installationen mit php-Versionen 4.3.1 bzw. 4.3.4 bekomme ich auch im zweiten Frame den korrekten Wert.
Auf einer 4.3.3-Installation funktioniert das nur dann, wenn es im ersten Frame keine "normale" Variable gleichen Namens gibt.
Mein Fragen:- Liegt das wirklich an den php-Versionen? Oder an was sonst?
- Hat jemand eine Idee, wie ich das auch im Problemfall hinbekomme?
Die Beispieldateien habe ich unten als abgestrippte Testversion aufgelistet, ebenso meine Testergebnisse.
Der oben beschriebene Unterschied für die 4.3.3-Installation tritt auf, je nachdem die include()-Zeile in
header.php auskommentiert ist oder nicht.
Allerbesten Dank für jeden Tip, denn das Problem nervt wirklich!
jotka
-------------------------------
/************ Datei
index.php ************/
Code:
<?php
function addSid() {
if(!ini_get('session.use_trans_sid')) echo '?', SID;
}
include('lang.inc');
ini_set('session.use_cookies', '0');
session_start();
$_SESSION['lang'] = 'en'; // ***** Setzen der Sessionvar. *****
session_write_close();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<frameset rows="60,*" frameborder="0" framespacing="0" border="0">
<frame src="header.php<?php addSid(); ?>" name="Header" />
<frameset cols="160,*" >
<frame src="menu.php<?php addSid(); ?>" name="Menu" />
<frame name="Main" />
</frameset>
<noframes><?php echo $lang['noFrames']; ?></noframes>
</frameset>
</html>
/************ Datei
header.php ************/
Code:
<?php
ini_set('session.use_cookies', '0');
session_start();
//include('lang.inc'); // ***** problematische Zeile! *****
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<h2>Header; Language: <?php echo $_SESSION['lang']; ?></h2>
</body>
</html>
/************ Datei
menu.php ************/
Code:
<?php
ini_set('session.use_cookies', '0');
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<div>$_SESSION['lang']:<br />
// ***** Lesen der Sessionvar. *****
<?php var_dump($_SESSION['lang']); ?>
</div>
</body>
</html>
/************ Datei
lang.inc ************/
Code:
<?php
$lang = array();
$lang['lang'] = 'en';
$lang['noFrames'] = 'Your browser must support frames!';
?>
/************ Meine Testergebnisse ************/
Unter 4.3.1, 4.3.4, sowie unter 4.3.3 mit auskommentiertem include() steht im zweiten Frame:
$_SESSION['lang']:
string(2) "en"
Unter 4.3.3 mit aktivem include():
$_SESSION['lang']:
array(2) {
["lang"]=> string(2) "en"
["noFrames"]=> string(33) "Your browser must support frames!"
}
In letzterem Fall enthält die Session also fälschlich nicht den hineingeschriebenen Wert, sondern den Wert der Variable $lang aus dem ersten Frame!