zac1987
zac1987

Reputation: 2777

How to add visited pages urls into a session array?

Everytime the user visit a page, the page url will be stored into an array session. I want to have 10 elements in the array only. So that 10 elements will save 10 latest visited page urls. Here is my codes :

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

I tested the code, it always overwrite the element in the array with new visited page, thus it has only 1 element in the array. How to make it not to overwrite the element?

Upvotes: 1

Views: 4237

Answers (3)

CVM
CVM

Reputation: 800

Simplest way to do this and keep just the last 10 entries will be to create your initial array with the correct size (via array_fill()). Then we can push new items onto the beginning of the array and pop old items off the other end using array_unshift() and 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']);
}

Make sure the above code always runs first. Then you can pass new URLs to the array when you want. So, perhaps something like:

trackPage($_SERVER['REQUEST_URI']);

Upvotes: 2

mario
mario

Reputation: 145482

You are always overwriting the array with a new one here:

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

Instead use:

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

Upvotes: 4

Chris Warrick
Chris Warrick

Reputation: 1619

You've ommitted session_start();. Working code (without trimming):

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

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

Upvotes: -1

Related Questions