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

时间:2013-05-03 13:07:55

标签: php javascript session sessionid

我有以下设置:

  • 的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;,以便我可以将其用作禁用的参考我的javascript动画在我包含的.js文件中进一步向下。

但不管我做什么,我只会得到“会话没有开始”。

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

2 个答案:

答案 0 :(得分: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中访问它,您需要以下内容:

<script type="text/javascript">
    var disableAnimation = <?=$_SESSION['disableAnimation'];?>;
    // do Javascript stuff with disableAnimation
</script>

答案 1 :(得分: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”)