PHP-Sessions killen, wenn Browser "hängt"
Sascha
- php
0 Stefan Bechtold0 Sascha0 Sascha
0 Cheatah
Hallo Forum! :-)
Ich habe ein Problem. Folgendes:
Ich habe ein Frameset (links die "Links" ;-) und rechts die "main") nun kann mein User bestimmte aktionen durchführen z. B. nach einem Gerät anhand eines IP-Range suchen. Jetzt kommts: Wenn der User die Such-Prozedur abbricht (naheliegend die Esc-Taste) hängt sich der Browser an der PHP-Session auf, d.h. vielmehr der Browser hängt sich an der Session auf (meiner Vermutung nach).
Es macht sich dadurch bemerkbar, dass der Browser (gleichgültig ob Netscape oder IE) die Suchaktion "weiter durchführt" und dadruch nicht auf andere "Komandos" reagiert. Bisher gibt es nur die Möglichkeit das Browserfenster komplett schließen (auch Netscape hier reicht das schließen der Registerkarte nicht aus). Denn dann erledigt der Server die Session. Dann wieder anmelden....
Wie ich unter "normalen" umständen die Session zerstöre ist mir schon klar, aber ich wollte fragen ob es eine Möglichkeit gibt anhand z. B. eines zusätzlichen Scripts bei abbruch versuchen des Users etweder den "absturz" des Browsers zu verhindern oder die Session sofort zu killen?
Vielen dank füre Eure Tipps
viele Grüße
Sascha
Hi Sascha,
ich kann mir nicht vorstellen, dass sich der Browser an der Suche aufhaengt. Kannst du dazu mal dein Script posten, evtl sind dort Progrmmierfehler...
Gruesse
Stefan
Hallo Stefan,
der Browser hängt sich auch nicht bei der suche auf, sonder wenn während des DB zugriffs (mehre Funktionen) die aktion via ESC abgebrochen wird. Lässt man die Aktion durchlaufen gibts auch kein Problem. Aber die meisten user geben was ein, schickens ab und heißt es "neee, das will ich doch gar nicht..->ESC" und da liegt der hase dann im Pfeffer oder halt in der Session ;-)
ich suche mal das script eben raus..
So da bin ich wieder
<schnipp>
$ip = $HTTP_POST_VARS["ip"];
$tmp = isIP(trim($ip));
if($ip!="" && $tmp>0)
{
$hostid = ipsearch(trim($ip)); //getHostIDInterfaceID(getInterfaceIDIPAddressID(getIPAddressID($ip)));
echo("
<TABLE>
<TR>
<TD colspan="7"> Folgende Treffer in der Datenbank für IP-Adresse <u>$HTTP_POST_VARS[ip]</u></TD>
</TR>
<TR bgcolor="#83CFBE">
<!--<TD> </TD>//-->
<TD>Detail</TD>
<TD>Hostnamen</TD>
<TD>DNS-Domain</TD>
<TD>IP-Adresse</TD>
<TD>DNS-Enable</TD>
<TD>DHCP-Enable</TD>
<TD>Aktiv</TD>
</TR>
");
for($i=0; $i <sizeof($hostid); $i++)
{
$dnsentmp = isDNSEnable($hostid[$i]);
if($i % 2 == 0)
{
$bgcolor = "bgColor='' ";
}
else
{
$bgcolor = "bgColor='#F2F7E6'";
}
if($dnsentmp==1)
{
$dnsen ="Yes";
}
else
{
$dnsen = "<b>No</b>";
}
$dhcpentmp = isDHCPEnable($hostid[$i]);
if($dhcpentmp==1)
{
$dhcpen ="Yes";
}
else
{
$dhcpen = "<b>No</b>";
}
$activetmp = isInUse($hostid[$i]);
if($activetmp==1)
{
$activ ="Yes";
}
else
{
$activ = "<font color="#FF0000"><b>No</b></font>";
}
echo("
<FORM action="../moreDetails.php" method="POST" name="ds" target="_self">
<TR $bgcolor onMouseOver="this.bgColor='#FBC5A4'" onMouseOut="this.$bgcolor">
");
$ipids = getIPAddressIDHostID($hostid[$i]);
echo("<!--<TD>$i</TD>//-->
<TD>
<INPUT TYPE="HIDDEN" name="hostid" value="$hostid[$i]">
<INPUT TYPE="SUBMIT" name="details" value="Detail">
</TD>
<TD>".getHostName($hostid[$i])."</TD>
<TD>".getDNSName(getDNSIDHostID($hostid[$i]))."</TD>
<TD>");
for($j=0;$j<sizeof($ipids);$j++)
{
echo(getIPAddress($ipids[$j])."<br>");
}
echo("
</TD>
<TD align="center">".$dnsen."</TD>
<TD align="center">".$dhcpen."</TD>
<TD align="center">".$activ."</TD>
");
echo("</TR>
</FORM>");
}
echo("</TABLE><hr width="600px" noshade>");
}
</schnipp>
Hi,
ja, nun wirds klar.
Ich hatte mal ein aehnliches Problem. Das haengt aber meiner Meinung nach nicht an der Session, da diese lediglich die Daten zwischenspeichert, sondern an den Netzwerkfunktionen, die du mit der IP betreibst ;o) Diese werden naemlich nicht unterbrochen, das ist richtig. Die Session wird aber einfach nur am anfang geladen und gut ist, also diesbezueglich bruachst du dir keine sorgen machen. Evtl. musst du mal schauen, ob du die Netzwerkabfragen mit der IP aendern kannst. Dazu eine Frage: Laeuft das Ganze zufaellig auf einem W2k oder NT Server? :o) Diese trennen naemlich solche Abfragen nicht, was die Linux Server doch irgendwie besser machen (soll aber keine Kritik an den Win Servern sein, ich arbeite auch damit, aber fuer solche Sachen sind die einfach nicht geschaffen...)
Gruss
Stefan
Hi,
hm..stimmt die Session wird zu anfang "bemüht" :-) vielleicht habe ich mich falsch ausgedrückt, hierbei handelt sich um eine Datenbankabfrage.. betreibe gerade eine Device-Datenbank und das sins halt die ips :-)
aber ja ich btreibe einen win2k rechner ;-D
gruss
Sascha
ok, dann hab ich heute dazu gelernt, dass der Windows 2k Server ebenso wie bei Netzwerkabfragen die Verbindung zum Browser ebenfalls bei wirklich aufwaendigen Datenbankabfragen nicht mehr trennt...
Wir stellen fest: DAS NERVT ;o)
ich dachte aber lediglich dass es sich um Netzwerkabfragen handeln wuerde, weil oben was mit getIPAddress drinstand und ich zu faul war bis zum Ende zu lesen, wo dann das ID folgte ;o)
Naja, denke du wirst da erst erfolg haben, wenn du das script auf einem linux basierten server laufen laesst. Lass dich also an diesen maengeln nicht von der programmierung aufhalten und hau in die tasten... ;o)
Hi ;-)
Lass dich also an diesen maengeln nicht von der programmierung aufhalten und hau in die tasten... ;o)
alles klar :o)
vielen dank trotzdem :)
Hi,
Bisher gibt es nur die Möglichkeit das Browserfenster komplett schließen [...] Denn dann erledigt der Server die Session.
tut er nicht. Der Server erfährt nicht, was der Client gerade macht bzw. ob er noch lebt. Die Ursache für Dein Problem ist eine andere.
Cheatah
Hi :-)
tut er nicht. Der Server erfährt nicht, was der Client gerade macht bzw. ob er noch lebt. Die Ursache für Dein Problem ist eine andere.
öhm, ja nee klar Du hast recht! aber die Sessionvariable wird aufjedenfall zunichte gemacht.
Hi,
aber die Sessionvariable wird aufjedenfall zunichte gemacht.
auch das nicht. Das einzige, was _eventuell_ passiert ist, dass der Client die zuvor verwendete Session-ID nicht mehr kennt bzw. verwendet. Wird dies vermieden - was z.B. per Copy&Paste ohne weiteres möglich ist - kann der Client hundert mal abstürzen, der Rechner ausgeschaltet oder auch ein anderer Rechner verwendet werden. Der Server merkt davon _nichts_.
Cheatah