繁体   English   中英

检查会话是否已启动,并设置全局变量以供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_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? 我遇到过类似的问题,它仅激活第一个实例,似乎与调用函数的顺序有关。

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

第一个条件是例外吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM