Php 如何将访问过的页面URL添加到会话数组中?

Php 如何将访问过的页面URL添加到会话数组中?,php,Php,用户每次访问页面时,页面url都将存储到数组会话中。我只希望数组中有10个元素。因此,10个元素将保存10个最新访问的页面URL。这是我的密码: <?php $currentpageurl = $_GET['username']; $urlarray=array(); $urlarray[] = $currentpageurl; $_SESSION['pageurl']=$urlarray; foreach($_SESSION['pageurl'] as $key=>$val

用户每次访问页面时,页面url都将存储到数组会话中。我只希望数组中有10个元素。因此,10个元素将保存10个最新访问的页面URL。这是我的密码:

<?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个元素。如何使其不覆盖元素?

您总是在这里用一个新数组覆盖数组:

$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

您总是在此处使用新阵列覆盖阵列:

$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

您已完成
session_start()。工作代码(无修剪):


您已完成
会话启动()。工作代码(无修剪):


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

确保上述代码始终先运行。然后,您可以在需要时将新URL传递给数组。所以,也许是这样的:

trackPage($_SERVER['REQUEST_URI']);

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

确保上述代码始终先运行。然后,您可以在需要时将新URL传递给数组。所以,也许是这样的:

trackPage($_SERVER['REQUEST_URI']);


谢谢你帮助我。它的give errors致命错误:[]运算符不支持第12行C:\wamp\www\plekz\testing18.php中的字符串获取更好的Web服务器。它与debian lenny在php5上运行良好。您可以找到另一种方法将其放入数组。-1您应该已将会话['pageurl']
初始化为
array()
,但它尚未设置。您依赖于较低的警告/通知级别。“那么你可以找到另一种方法来做”也不是特别有用,是吗?谢谢你的帮助。它的give errors致命错误:[]运算符不支持第12行C:\wamp\www\plekz\testing18.php中的字符串获取更好的Web服务器。它与debian lenny在php5上运行良好。您可以找到另一种方法将其放入数组。-1您应该已将会话['pageurl']
初始化为
array()
,但它尚未设置。您依赖于较低的警告/通知级别。“那么你可以找到另一种方法来做”也不是特别有用,是吗?谢谢你的帮助。在我按照你的建议做了之后,它仍然会覆盖现有的元素。这是因为会话无法将值发送到其他页面,因为页面的url从testing18.php更改为testing18.php?username=zac1987到testing18.php?username=abc123你可能会错过会话启动,就像Kwpolska说的那样。请参阅更新以了解解决问题的方法(该位置已存在字符串)。否则您有其他代码,或者没有删除您的代码,这将无效地覆盖条目。@mario,非常感谢!!!你的代码工作得很好。无论如何,我真的不理解代码“//修复您当前的问题”,代码所做的是检查$\u会话[“pageurl”]是否是数组吗?如果它不是数组,则将$_会话[“pageurl”]变成数组?@zac1987:是。它就是这样做的。这只是另一种写
if
检查的方式。谢谢你的帮助。在我按照你的建议做了之后,它仍然会覆盖现有的元素。这是因为会话无法将值发送到其他页面,因为页面的url从testing18.php更改为testing18.php?username=zac1987到testing18.php?username=abc123你可能会错过会话启动,就像Kwpolska说的那样。请参阅更新以了解解决问题的方法(该位置已存在字符串)。否则您有其他代码,或者没有删除您的代码,这将无效地覆盖条目。@mario,非常感谢!!!你的代码工作得很好。无论如何,我真的不理解代码“//修复您当前的问题”,代码所做的是检查$\u会话[“pageurl”]是否是数组吗?如果它不是数组,则将$_会话[“pageurl”]变成数组?@zac1987:是。它就是这样做的。这只是写
如果
检查的另一种方式。很酷的东西!从你身上学到新东西。谢谢天才CVM。很酷的东西!从你身上学到新东西。谢谢GENIUS CVM。实际上我只想保存用户配置文件页面的url,每个url一开始都是相同的,只是用户名不同,所以我只需要保存用户名。好的。看起来变量名的选择很奇怪,IMO。实际上我只想保存用户配置文件页面url,每个url一开始都是相同的,只是用户名不同,所以我只需要保存用户名。好的。依我看,变量名的选择似乎很奇怪。