$_SESSION变量在我的本地计算机上运行良好,但在开发Web服务器上返回空值

时间:2019-11-07 作者:Jim

我用钩子钩住init 我添加了一个特定的时间戳,以便在我的Wordpress项目中包含一个启动屏幕。

脚本的基本逻辑是:

  • add_action("init", "my_function", 1)
  • my_function 处理所有逻辑并存储$_SESSION 当我尝试检查本地机器(MAMP、Mac)上的变量时,它工作得非常好。我可以得到时间戳,只需检查时间戳+偏移量是否大于当前时间。如果/否则,我将显示屏幕。

    然而,由于某种原因,我将脚本推送到了我的在线开发服务器上$_SESSION 可变收益率NULL 完全我读过一些关于在使用后销毁会话的内容,但这并没有真正起作用。

    想知道,有人知道这里出了什么问题吗?我真的不知道。。。此外这整章在Wordpress方面的记录非常糟糕,这让我别无选择,只能在这里提问。。。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

WordPress不使用$_SESSION 变量,您也不应该。

会话变量会带来很多问题:

它们与页面缓存插件根本不兼容,与Cloudflare等系统不兼容WordPress使用Cookie跟踪会话很多WP主机都没有设置为使用PHP会话变量,例如WP引擎如果你的目标是在人们第一次访问你的站点时显示初始屏幕,你就不需要PHP会话变量,有更好/更简单/更容易的方法来做这件事。

例如:

  • Cookies!! This is probably your best bet, and can be set via javascript too:visited 伪选择器,例如。.modal_link:visited * { display: none; visibility: hidden; } 哪里modal_link 是指向主页的超链接上的类名,而不是显示初始屏幕awful UXincredibly annoying 对于您的网站访问者,如果您不小心将其拒之门外,您需要中级到高级的开发人员技能才能将其带回。研究表明disadvantages, etc, etc, etc
最后一个选项将提供最佳的用户体验。

对于您的本地计算机,MAMP等无法对其使用的内容进行太多猜测,这与WP管理的主机不同。您和MAMP之间也极不可能插入CDN。对于登录的用户,可能也会禁用任何页面缓存。这并不意味着在MAMP中起作用的东西应该在任何地方都起作用,只是在MAMP中起作用的东西将在MAMP中起作用

相关推荐

为edit.php页面上的自定义帖子类型字段添加列和帖子过滤器

我有一个插件,它创建了一个自定义帖子类型,该类型有一个使用插件生成的自定义字段。自定义字段作为一个称为status. 此元键的值为“打开”或“关闭”。在“编辑”上。php页面列出了帖子,我想在一列中显示状态字段的内容。我还想添加一个过滤器,允许管理员在默认情况下显示所有帖子,并使用过滤器选择器仅查看“打开”和“关闭”帖子。