0

我有以下设置:

  • 索引.php
  • 子页面.php

访问任一页面时,我都有一个“标题介绍动画”。我只希望用户在第一页访问时看​​到这个动画,而不是在刷新/访问同一会话中的其他子页面时重复它。

我尝试过执行以下操作:

$disableAnimationOnOtherPages;

 if(session_id() === '')
 {
    // session has NOT been started
    session_start();
    echo "SESSION WAS NOT SET";
 }
 else
 {
    // session has been started
    echo "SESSION HAS BEEN SET";
    $disableAnimationOnOtherPages = true;
 }

因此,当我第一次访问任何页面时,我设置/启动会话,然后如果我刷新或转到子页面,$disableAnimationOnOtherPages = true;则将被设置,以便我可以将其用作在包含的 .js 中禁用我的 javascript 动画的参考文件进一步向下。

但无论我做什么,我都只会得到“会话没有开始”。

关于我在这种情况下做错了什么的任何想法?

4

2 回答 2

1

session_start();并不意味着“创建新会话”,它意味着创建或继续先前启动的会话,然后您可以使用 $_SESSION 来存储值。

所以你真正想做的是:

session_start();

if(!isset($_SESSION['disableAnimation']))
{
    // Session wasn't started, show animations.
    $_SESSION['disableAnimation'] = false;
}
else
{
    // Session has been started previously, disable animations.
    $_SESSION['disableAnimation'] = true;
}

然后,您可以使用$_SESSION['disableAnimation']禁用动画而不是全局变量,因为全局变量通常不受欢迎。

编辑:

要在 JavaScript 中访问 this,您需要类似以下内容:

<script type="text/javascript">
    var disableAnimation = <?=$_SESSION['disableAnimation'];?>;
    // do Javascript stuff with disableAnimation
</script>
于 2013-05-03T13:22:53.373 回答
0

尝试删除脚本顶部的 $disableAnimationOnOtherPages 吗?我遇到过类似的问题,它只激活第一个实例,这似乎是函数调用顺序的问题。

或者(我最近也这样做了)

第一个条件是例外吗?

if(session_id !='')
{
//session has been started
echo "SESSION HAS BEEN SET";
$disableAnimationOnOtherPages = true;
} else {
//session has NOT been started
echo "SESSION HAS NOT BEEN SET";
session_start();
}

这是完全未经测试的,只是我想尝试的想法。(我遇到过类似的问题,并且一直在玩这两种想法,有时它们会起作用,而有时代码会嘲笑我大喊“SUCKER”)

于 2013-05-03T13:20:34.880 回答