session_start()错误:为什么它无法识别新会话?

时间:2013-12-06 04:30:41

标签: php 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>';

2 个答案:

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

我希望这会有所帮助。