我正在尝试创建一个页面,如果用户第一次来,它会重定向到索引页面,但如果用户第二次来,页面不会重定向。我使用简单的php会话来计算访问次数,并使用if语句来检查条件:
<?php
session_start();
$_SESSION['views'] = $SESSION['views']+1;
if($SESSION['views'] = 1){
header("location:index.php");
}
?>
问题是用零初始化阵列,即
<?php
$_SESSION['views']=0;
?>
它并没有看起来那么简单,也没有那么艰难。
使用isset()
检查密钥是否已创建:
<?php
session_start();
if (!isset($_SESSION['views'])) {
$_SESSION['views'] = 0;
}
$_SESSION['views'] = $_SESSION['views']+1;
if ($_SESSION['views'] == 1) {
header("location:index.php");
}
?>
还要小心:您有if ($SESSION['views'] = 1)
,它将密钥设置为1,而不是比较它,正确的超全局名称是$_SESSION
而不是$SESSION
。
首先(其中@nivrig和@Yan不修复)
if($_SESSION['views'] = 1){
header("location:index.php");
}
应该是
if ($_SESSION['views'] == 1){
header("location:index.php");
}
和@nivrig一起去他的例子是正确的
同意nivrig。检查会话是否已设置。
不过,您的代码中有几个语法错误:
确保你写的是$_SESSION而不是$SESSION,当你使用if时,你必须使用==进行比较。单个=将为变量赋值。
由于您不想担心首先初始化变量,请使用isset()来检查变量是否已设置并且不是NULL:
<?php
session_start();
if(isset($_SESSION['views'])){
$_SESSION['views']++;
}else{
$_SESSION['views'] = 0;
header("location: index.php");
exit();
}
?>
如果你不在乎用户访问页面的次数,那么你可以简单地使用:
<?php
session_start();
if(!isset($_SESSION['views'])){
$_SESSION['views'] = 0;
header("location: index.php");
exit();
}
?>
第二种解决方案不担心增加views
的数量,只检查该值是否已设置。如果尚未设置,则可以断言这是用户第一次访问页面,然后设置变量并重定向用户。通过设置变量,可以确保用户在查看页面后不会进入循环。这种方法应该能更好地按照最初的要求简化事情。
还要确保在重定向用户后放置exit()
。这样可以确保在重定向用户时不会执行下面的任何代码。