0

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

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

在我访问了几页之后,上面的脚本只打印了我访问的最后一页,而不是显示所有页面。任何人都可以帮我解决问题吗?谢谢你。

4

6 回答 6

5

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

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

... 
于 2013-05-07T20:22:51.940 回答
1

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

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

解决方案:检查数组是否存在,添加一个元素。

if (!isset($_SESSION['page'])){
  $_SESSION['page'] = array();
}
$_SESSION['page'][] = "New data" ;
于 2013-05-07T20:23:19.623 回答
1

是的,你必须这样做:

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

否则,您只需一次又一次地覆盖'time'密钥..

于 2013-05-07T20:23:43.903 回答
0

从您的代码中删除以下行。

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

以上几行正在重置您的会话变量。

于 2013-05-07T20:22:48.360 回答
0

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

$_SESSION['page']=array(); // the $_SESSION['page'] now is empty
$_SESSION['page'][]=$_SERVER['REQUEST_URI'];
于 2013-05-07T20:23:44.780 回答
0

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

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

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;
}

就像其他人提到的那样,您的代码的主要问题是您正在编写相同的会话变量。

于 2013-05-07T20:39:56.370 回答