在创作插件时,应该如何挂接Session_Start()?

时间:2016-08-24 作者:DᴀʀᴛʜVᴀᴅᴇʀ

了解有关课程的更多信息我收集到session_start() 应该直接在后面<?phpWhere exactly do I put a SESSION_START? 我想创建一个插件,添加一个session_start()header.php 之后<?php 但在搜索之后,我一直在尝试找出合适的程序来完成这项工作。

我确实在搜索session 但我看过各种各样的问答;这似乎主要用于:

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

没有常规输出,因此之前没有发送头template_redirect 在前端。如果您也需要后端会话,请使用操作wp_loaded 覆盖两者。

示例:

add_action( \'template_redirect\', function() {

    $status = session_status();

    if ( PHP_SESSION_DISABLED === $status ) {
        // That\'s why you cannot rely on sessions!
        return;
    }

    if ( PHP_SESSION_NONE === $status ) {
        session_start();
    }

    $_SESSION[ \'foo\' ] = \'bar\';
});
请记住,使用会话可以set of very complex problems 包括安全性、可伸缩性(负载平衡器)和以下耗时的支持问题。我不推荐。

SO网友:Ivijan Stefan Stipić

这里还有另一个针对各种PHP版本的解决方案CF Geo Plugin:

if (version_compare(PHP_VERSION, \'7.0.0\') >= 0) {
    if(function_exists(\'session_status\') && session_status() == PHP_SESSION_NONE) {
        session_start(array(
          \'cache_limiter\' => \'private_no_expire\',
          \'read_and_close\' => false,
       ));
    }
}
else if (version_compare(PHP_VERSION, \'5.4.0\') >= 0)
{
    if (function_exists(\'session_status\') && session_status() == PHP_SESSION_NONE) {
        session_cache_limiter(\'private_no_expire\');
        session_start();
    }
}
else
{
    if(session_id() == \'\') {
        if(version_compare(PHP_VERSION, \'4.0.0\') >= 0){
            session_cache_limiter(\'private_no_expire\');
        }
        session_start();
    }
}
使用此解决方案,您可以防止会话出现任何问题,并在需要时随时启动会话。

SO网友:Sachin Saini

我们可以通过init-hook使用简单的方法。在函数中写入此函数。php

function register_my_session() {
  if( !session_id() )
  session_start();
}
add_action(\'init\', \'register_my_session\');
在函数中添加此函数后。php您可以在会话中设置值,如

$_SESSION[\'user_country\'] = \'india\';
获取会话值

echo $_SESSION[\'user_country\'];
用于销毁会话值

unset($_SESSION["user_country"]);