如何将访问过的网页网址添加到会话数组中?

时间:2011-04-22 11:28:36

标签: php

每次用户访问页面时,页面URL都将存储到数组会话中。我想只在数组中有10个元素。这样10个元素将保存10个最新访问过的页面网址。这是我的代码:

<?php
$currentpageurl = $_GET['username'];

$urlarray=array();

$urlarray[] = $currentpageurl;

$_SESSION['pageurl']=$urlarray;

foreach($_SESSION['pageurl'] as $key=>$value)
    {
    echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />';
    }
?>

我测试了代码,它总是使用新访问页覆盖数组中的元素,因此它在数组中只有1个元素。如何使它不覆盖元素?

3 个答案:

答案 0 :(得分:4)

您总是在这里用新的数据覆盖数组:

$urlarray=array();       // new empty array
$urlarray[] = $currentpageurl;    
$_SESSION['pageurl']=$urlarray;

改为使用:

session_start();
// like @Kwpolska said, you probably miss that, so $_SESSION didnt work

is_array($_SESSION["pageurl"]) or $_SESSION["pageurl"] = array();
// fix for your current problem

$_SESSION['pageurl'][] = $currentpageurl;
// This appends it right onto an array.

$_SESSION["pageurl"] = array_slice($_SESSION["pageurl"], -10);
// to cut it down to the last 10 elements

答案 1 :(得分:2)

最简单的方法是保留最后10个条目,即使用正确的大小创建初始数组(通过array_fill())。然后我们可以将新项目推送到数组的开头,并使用array_unshift()和array_pop()从另一端弹出旧项目。

session_start();

// Initialise URL array with 10 entries.
if (empty($_SESSION['pageurls'])) {
    $_SESSION['pageurls'] = array_fill(0,10,'');
}

function trackPage($url) {
    array_unshift($_SESSION['pageurls'],$url);
    array_pop($_SESSION['pageurls']);
}

确保上面的代码始终先运行。然后,您可以根据需要将新URL传递给阵列。所以,也许是这样的:

trackPage($_SERVER['REQUEST_URI']);

答案 2 :(得分:-1)

你已经省略了session_start();。工作代码(不修剪):

<?php
session_start();
$currentpageurl = $_GET['username'];
$_SESSION['pageurl'][] = $currentpageurl;

foreach($_SESSION['pageurl'] as $key=>$value) {
    echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />';
}
?>