会话数组只存储最后一个元素


Session array only stores the last element

我正在尝试跟踪用户访问的页面和使用会话变量访问的日期。在我的页面中,我像这样将变量赋值为数组:

session_start();
$_SESSION['page']=array();
$_SESSION['page'][]=$_SERVER['REQUEST_URI'];
$_SESSION['time']=array();
$_SESSION['time'][]=date("m/d/y", time());

我使用以下脚本将变量打印出来:

<?php
session_start();
print_r($_SESSION['page']);
print_r($_SESSION['time']);
?>

在我访问了几个页面之后,上面的脚本只打印了我访问的最后一个页面,而不是显示所有的页面。有人能帮我排除故障吗?谢谢你。

这是因为您在每次页面访问时都要一次又一次地初始化数组。用这样的东西代替:

// initialize array only if it not already exists:
if(!is_array($_SESSION['page'])) {
    $_SESSION['page']=array();
}
$_SESSION['page'][]=$_SERVER['REQUEST_URI'];
... 

每次都重新声明数组,从而清理它:

$_SESSION['page']=array();

解决方法:检查array是否存在,添加元素

if (!isset($_SESSION['page'])){
  $_SESSION['page'] = array();
}
$_SESSION['page'][] = "New data" ;

是的,你必须这样做:

if (!isset($_SESSION['time'])) {
   $_SESSION['time'] = array();
}
if (!isset($_SESSION['page'])) {
   $_SESSION['page'] = array();
}
$_SESSION['time'][] = date("m/d/y", time());

否则,您只需一次又一次地覆盖'time'键。

从代码中删除以下行。

$_SESSION['page']=array();
$_SESSION['time']=array();

上面的行是重置会话变量

每次保存新会话时都将它们重新设置为空数组:

$_SESSION['page']=array(); // the $_SESSION['page'] now is empty
$_SESSION['page'][]=$_SERVER['REQUEST_URI'];

我会将这种信息存储在数据库中,并在需要时调用它。

但是要回答关于在会话变量中执行此操作的确切问题,只需使用以下内容:

session_start();
/****Record visit****/
$newvisit=array();
$newvisit['page']=$_SERVER['REQUEST_URI'];
$newvisit['time']=date("m/d/y",time());
/****Store visit in SESSION****/
if(!empty($_SESSION['visits'])){
    array_push($_SESSION['visits'],$newvisit);
}else{
    $_SESSION['visits'][0]=$newvisit;
}

就像其他人提到的,你的代码的主要问题是你写在同一个会话变量。