session_start()错误:为什么它没有´;无法识别新会话


session_start() error: why it doesn´t recognize a new session?

我正在测试一个php练习,但我无法使它正常工作。它是一个计数器,将访问量作为一个简单的整数存储在txt文件中。每次我重新加载页面时,数字都会变成+1。

现在,我希望它只在有新访问时重新加载,所以我第一次尝试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>';

contador应该用引号括起来,除非它是某个地方定义的常量??我想是字符串

$_SESSION["contador"]

试试这个。这是不同的,但它至少会有所帮助。本想作为评论发布,但我想要代码格式。

session_start();
if(empty($_SESSION['contador'])){
    $_SESSION['contador']=1;
}else{
    $_SESSION['contador']++;
}
echo '<h3>Hay '.$_SESSION['contador'].' visitas.</h3>';

首先,@Lenny是正确的$_SESSION['contactor']是所谓的会话变量或分配给$_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。那么你的价值就增加了一。您将在每次加载时执行该任务。您需要修改此代码并完成条件语句。

<?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>';
?>

我希望这能有所帮助。