检查会话是否已经启动,并设置javascript要使用的全局变量


Check if session has been started and set global var for javascript to use

我有以下设置:

  • index . php
  • subpage.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动画。

但是不管我怎么做,我只得到"SESSION WAS NOT STARTED"。

在这种情况下,我做错了什么?

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中访问它,您需要这样做:
<script type="text/javascript">
    var disableAnimation = <?=$_SESSION['disableAnimation'];?>;
    // do Javascript stuff with disableAnimation
</script>

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

OR(我最近也这么做过)

第一个条件是例外吗?

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")