现在,我希望它只在新访问时重新加载,所以我第一次尝试sesion_start()。
在课堂上,这个例子运行得很好,但是当我尝试在家里重现它时,即使我关闭浏览器并再次打开它,数字也不会改变。
这是我的代码(它自然位于php标签内):
session_start();
if (!$_SESSION[contador]) {
define('ARCHIVO', 'visitas.txt');
if (file_exists(ARCHIVO)) {
$fp=fopen(ARCHIVO, 'r');
$cant=fread($fp,filesize(ARCHIVO));
fclose($fp);
} else {
$cant=0;
}
$cant++;
$fp=fopen(ARCHIVO, 'w');
fwrite($fp, $cant);
fclose($fp);
$_SESSION[contador]=$cant;
}
echo '<h3>Hay '.$_SESSION[contador].' visitas.</h3>';
答案 0 :(得分:3)
contador应该是引号,除非它是某个定义的常量?我认为这是一个字符串
$_SESSION["contador"]
试一试。它有所不同,但它至少会做些什么。会发布评论,但我想要代码格式化。
session_start();
if(empty($_SESSION['contador'])){
$_SESSION['contador']=1;
}else{
$_SESSION['contador']++;
}
echo '<h3>Hay '.$_SESSION['contador'].' visitas.</h3>';
答案 1 :(得分:0)
首先,@ Lenny是正确的。 $ _SESSION ['contador']是所谓的会话变量或分配给$ _SESSION数组的变量。所以它必须在引号中。那不是可选的。并且您无法定义常量并在括号内使用该值。
如果你有一个常量,你可以设置会话变量。但是,由于您的值是可变的,因此在逐步添加时,根据定义,它不是常量。
此外,刷新Web浏览器可使会话保持活动状态。所以如果你真的想测试一下,试试session_destroy();在某些时候。
以下是此代码的工作方式(无论如何存储会话变量):
<?php
session_start();
if(!isset($_SESSION['contador'])) {
define('ARCHIVO', 'visitas.txt');
if(file_exists(ARCHIVO)) {
$fp = fopen(ARCHIVO, 'r');
$cant = fread($fp,filesize(ARCHIVO));
fclose($fp);
} else {
$cant=0;
}
$cant++;
$fp = fopen(ARCHIVO, 'w');
fwrite($fp, $cant);
fclose($fp);
$_SESSION['contador'] = $cant;
}
echo '<h3>Hay ' . $_SESSION['contador'] . ' visitas.</h3>';
?>
注意:你的逻辑很糟糕。你告诉你的脚本$ cant要么等于txt文件的值,要么等于0.然后你将该值递增1。您将在每次加载时执行该任务。您需要修改此代码并完成条件语句。
<?php
session_start();
if(!isset($_SESSION['contador'])) {
define('ARCHIVO', 'visitas.txt');
if(file_exists(ARCHIVO)) {
$fp = fopen(ARCHIVO, 'r');
$cant = fread($fp,filesize(ARCHIVO));
fclose($fp);
} else {
$cant=0;
}
$cant++;
$fp = fopen(ARCHIVO, 'w');
fwrite($fp, $cant);
fclose($fp);
$_SESSION['contador'] = $cant;
} else {
$_SESSION['contador']++;
}
echo '<h3>Hay ' . $_SESSION['contador'] . ' visitas.</h3>';
?>
我希望这会有所帮助。