3

我正在尝试创建一个页面,如果您的用户第一次来,它会重定向到索引页面,但如果用户第二次来,页面不会重定向。我正在使用简单的 php 会话来计算访问次数,并使用 if 语句来检查条件:

<?php
session_start(); 
$_SESSION['views'] = $SESSION['views']+1;
if($SESSION['views'] = 1){
header("location:index.php");
}
?>

问题是用零初始化数组,即

<?php    
$_SESSION['views']=0;
?>

它既不像看起来那么简单,也没有那么难。

4

4 回答 4

9

用于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)将 key 设置为 1 而不是比较它,并且正确的超全局名称$_SESSION不是$SESSION.

于 2012-07-14T07:16:08.047 回答
1

首先(@nivrig 和 @Yan 不修复)

if($_SESSION['views'] = 1){
header("location:index.php");
}

应该

if ($_SESSION['views'] == 1){ 
header("location:index.php");
}

和@nivrig一起去他的例子是对的

于 2012-07-14T07:20:23.680 回答
0

同意尼夫里格。检查会话是否已设置。

但是,您的代码中有几个语法错误:

确保您写的是 $_SESSION 而不是 $SESSION 并且当您使用 if 案例时,您必须使用 == 进行比较。单个 = 将为变量赋值。

于 2012-07-14T07:19:26.343 回答
0

由于您不想先初始化变量,因此请使用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()在重定向用户之后放置。这样可以确保在重定向用户时不会执行以下任何代码。

于 2012-07-14T07:21:04.523 回答