Sessionvariablen werden gelöscht
Nico
- php
Hallo!
Ich habe aus dem SelfHTML-ForumsArchiv ein Script nach meinen Bedürfnissen angepasst und das ist dabei rausgekommen:
<?php
session_start();
$cfile = "count.txt";
$fh = fopen($cfile,'a');
fclose($fh);
$fh = fopen($cfile, 'rb+');
$count = intval(fgets($fh, 1024));
echo $_SESSION['lastvisit']."<br>";
if (time()-$_SESSION['lastvisit']>7200 OR $_SESSION['lastvisit']=""){
$_SESSION['lastvisit']=time();
$count++;
}
$_SESSION['lastvisit']=$_SESSION['lastvisit'];
fseek($fh, 0, SEEK_SET);
fputs($fh, $count);
fclose($fh);
echo $count;
phpinfo();
?>
Das soll also ein Besucherzähler werden. Die Session benutze ich um einen Besucher, der 10 mal die Seite aktualisiert nicht zehn mal mitgezählt wird.
Beim erstmaligen Ausführen des Scripts wird auch ordnungsgemäß der Zähler erhöht. Beim zweiten nicht. So weit, so gut.
Aber beim dritten Mal wird der Zähler erhöht, obwohl die Zeitspanne die 2 Stunden nicht überschreitet. Die angezeigte Sessionvariable 'lastvisit' ist dann auch plötzlich "".
Ich denke mir also, dass entweder die ganze Session bzw. der Cookie oder blos die eine Variable gelöscht wurde (Ersteres halte ich aber für wahrscheinlicher).
In der phpinfo() steht auch session.cookie_lifetime=0. Könnte das evt. etwas mit meinem Problem zu tun haben?
Das Problem ist übrigens, dass der Zähler beim mehrmaligen Ausführen des Scripts hintereinander alle zwei Male erhöht wird. Also beim dritten, fünten, siebten... Mal.
Ich hoffe, mir kann jemand helfen.
Nico
Hi Nico,
schalt mal alle Fehlermeldungen ein:
<?php
error_reporting(E_ALL);
session_start();
$cfile = "count.txt";
$fh = fopen($cfile,'a');
fclose($fh);$fh = fopen($cfile, 'rb+');
$count = intval(fgets($fh, 1024));
echo $_SESSION['lastvisit']."<br>";
if (time()-$_SESSION['lastvisit']>7200 OR $_SESSION['lastvisit']=""){
$_SESSION['lastvisit']=time();
$count++;
}
# $_SESSION['lastvisit']=$_SESSION['lastvisit'];
fseek($fh, 0, SEEK_SET);
fputs($fh, $count);
fclose($fh);
echo $count;phpinfo();
?>
LG
Chris
Hello,
Ich habe aus dem SelfHTML-ForumsArchiv ein Script nach meinen Bedürfnissen angepasst und das ist dabei rausgekommen:
<?php
Error_reporting(E_ALL);
session_start();
$cfile = "count.txt";
$fh = fopen($cfile,'a');
fclose($fh);$fh = fopen($cfile, 'rb+');
flock($fh,LOCK_EX);
$count = intval(fgets($fh, 1024));
$time = time();
if (!empty($_SESSION['lastvisit']))
{
Echo "<p>Dein Letzter Besuch war am ".
date('d.m.Y H:i:s',$_SESSION['lastvisit'])."</p>\n";
if ( $time - $_SESSION['lastvisit'] > 7200 )
{
$count++;
}
}
else
{
Echo "<p>Willkommen zu Deinem neuen Besuch: ".
date('d.m.Y H:i:s',$_SESSION['lastvisit'])."</p>\n";
}
$_SESSION['lastvisit'] = $time;
fseek($fh, 0, SEEK_SET);
fputs($fh, $count);
fclose($fh);
Echo $count;
?>
Die Echo-Texte sind nur als Beispiel gedacht, welcher Zustand an der Stelle besteht.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hello,
<?php
Error_reporting(E_ALL);
session_start();
$cfile = "count.txt";
$fh = fopen($cfile,'a');
fclose($fh);$fh = fopen($cfile, 'rb+');
flock($fh,LOCK_EX);
$count = intval(fgets($fh, 1024));beim ersten Mal ist hier $_SESSION['lasvisit'] nicht vorhanden.
echo $_SESSION['lastvisit']."<br>";
Die Funktion nur einmal aufrufen!
$time = time();
if (!empty($_SESSION['lastvisit']))
{
Echo "<p>Dein Letzter Besuch war am ".
date('d.m.Y H:i:s',$_SESSION['lastvisit'])."</p>\n";
if ( $time - $_SESSION['lastvisit'] > 7200 )
{
$count++;
}
}
else
{
Echo "<p>Willkommen zu Deinem neuen Besuch: ".
date('d.m.Y H:i:s',$_SESSION['lastvisit'])."</p>\n";
$count++;
}
$_SESSION['lastvisit'] = $time;
fseek($fh, 0, SEEK_SET);
fputs($fh, $count);
fclose($fh);Echo $count;
?>
Sorry, aber sonst würde der Erstbesuch gar nicht gezählt werden.
Wenn also nun jemand keine Cookies annimmt, wird trotzdem jeder Hit gezählt.
Aber das weißt Du doch bestimmt...
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Danke! etzt funktionierts.
Danke auch an Chris. So hatte ichs auch schon probiert. Aber das hat nicht funktioniert.
Nico
Oh! Es geht doch nicht ganz. Ich hab das Script jetzt nach ca 1 Stunde nochmal ausgeführt und da kam
Notice: Undefined index: lastvisit in ... on line 12
Und da ja dann empty($_SESSION['lastvisit'])=true, wurde dann wieder gezählt.
Kann das etwas mit dem session.cookie_lifetime=0 in der phpinfo() zu tun haben?
Nico
Hello,
Notice: Undefined index: lastvisit in ... on line 12
Und da ja dann empty($_SESSION['lastvisit'])=true, wurde dann wieder gezählt.
Kann das etwas mit dem session.cookie_lifetime=0 in der phpinfo() zu tun haben?
Genau das hat Dennis Dir gerade geschrieben.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Gut. Jetzt ist alles klar. Für alle, die den kompletten Quellcode nochmal sehen wollen:
<?php
error_reporting(E_ALL);
session_start();
$cfile = "count.txt";
$fh = fopen($cfile,'a');
fclose($fh);
$fh = fopen($cfile, 'rb+');
flock($fh,LOCK_EX);
$count = intval(fgets($fh, 1024));
$time=time();
if (empty($_SESSION['lastvisit'])){
echo "Willkommen zu deinem neuen Besuch<br>";
$_SESSION['lastvisit']=time();
$count++;
fseek($fh, 0, SEEK_SET);
fputs($fh, $count);
fclose($fh);
exit;
}
if (time()-$_SESSION['lastvisit']>7200){
echo "Willkommen zu deinem neuen Besuch<br>";
$_SESSION['lastvisit']=time();
$count++;
}
Else{echo "Du warst schon mal hier seit den letzten 2 Stunden.<br>Dein letzter Besuch war am ".date('d.m.Y um H:i:s',$_SESSION['lastvisit']).".<br>";}
$_SESSION['lastvisit']=$_SESSION['lastvisit'];
fseek($fh, 0, SEEK_SET);
fputs($fh, $count);
fclose($fh);
echo $count;
?>
Das ist zwar ein bisschen anders als das, was wir - besser gesagt meine Helfer, denen ganz herzlich gedankt sei - hier fabriziert haben. Es funktioniert aber trotzdem. Nur wenn man den Browser schließt wird die Session gelöscht. Aber das ist ja auch nicht so schlimm. Wenn derjenige dann wieder auf die Seite kommt, wird er als neuer esucher gelistet. Das ist er dann ja im Prinzip auch.
Nico
Hi Tom,
if (!empty($_SESSION['lastvisit']))
{
# [...]
}
else
{
Echo "<p>Willkommen zu Deinem neuen Besuch: ".
# date('d.m.Y H:i:s',$_SESSION['lastvisit'])."</p>\n";
# an dieser Stelle existiert $_SESSION['lastvisit']
# doch noch gar nicht, wie wir oben ja abgefragt
# haben, deshalb müsste hier doch eigentlich $time
# verwendet werden
date('d.m.Y H:i:s', $time) . "</p>\n";
$count++;
}
MfG, Dennis.
Hello,
else
{
Echo "<p>Willkommen zu Deinem neuen Besuch: ".
# date('d.m.Y H:i:s',$_SESSION['lastvisit'])."</p>\n";
# an dieser Stelle existiert $_SESSION['lastvisit']
# doch noch gar nicht, wie wir oben ja abgefragt
# haben, deshalb müsste hier doch eigentlich $time
# verwendet werden
date('d.m.Y H:i:s', $time) . "</p>\n";
$count++;
}
Wo Du Recht hast...
Stimmt auffallend.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom