【问题标题】:session_start(): Session callback expects true/false return value insession_start():会话回调期望真/假返回值
【发布时间】:2016-08-26 05:41:17
【问题描述】:

我有 Cs Cart Multi 供应商。我将我的 PHP 5.5 升级到 PHP 7.0。 并有错误:

865 FastCGI 在标准错误中发送:“PHP 消息:PHP 警告: session_start():会话回调期望真/假返回值 /var/www/cscart/app/Tygh/Session.php 第 341 行 PHP 消息:PHP 致命错误:session_start():初始化存储模块失败: 第 341 行 /var/www/cscart/app/Tygh/Session.php 中的用户(路径:/var/lib/php/sessions) 从上游读取响应头时,客户端:49.189.136.11, 服务器:

目录 /var/lib/php/sessions 有 0777。在其他站点上会话工作正常。

文件 Session.php:

 /**
 * Starts session
 * @param array $request Request data
 */
public static function start($request = array())
{
    // Force transfer session id to cookies if it passed via url
    if (!empty($request[self::$_name])) {
        self::setId($request[self::$_name], false);
    } elseif (empty($_COOKIE[self::$_name])) {
        self::setId(self::_generateId());
    }

    session_name(self::$_name);
    session_start();


    // Session checker (for external services, returns "OK" if session exists, empty - otherwise)
    if (!empty($request['check_session'])) {
        die(!empty($_SESSION) ? 'OK' : '');
    }

    // Validate session
    if (!defined('SKIP_SESSION_VALIDATION')) {
        $validator_data = self::getValidatorData();
        if (!isset($_SESSION['_validator_data'])) {
            $_SESSION['_validator_data'] = $validator_data;
        } else {
            if ($_SESSION['_validator_data'] != $validator_data) {
                session_regenerate_id();
                $_SESSION = array();
            }
        }
    }

    // _SESSION superglobal variable populates here, so remove it from global scope if needed
    if (Bootstrap::getIniParam('register_globals')) {
        Bootstrap::unregisterGlobals('_SESSION');
    }

}

服务器:NGINX,PHP7.0-FPM

【问题讨论】:

    标签: session nginx php-7 fpm


    【解决方案1】:

    session_start() 使用您之前使用session_set_save_handler(...) 设置的任何处理程序,并且该处理程序(或各个函数)必须返回真/假结果以表示成功或失败。您有一个不返回真/假结果的处理程序。

    回顾一下;实际错误是会话处理程序的实现,而不是调用 session_start() 的代码。

    【讨论】:

      【解决方案2】:

      如果你使用 session_handler ,例如 SessionRedisHandler 类,打开函数必须返回 true。我在 php7.0 中解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-21
        • 1970-01-01
        • 2013-06-14
        • 2013-05-29
        • 1970-01-01
        • 2011-02-04
        • 1970-01-01
        • 2012-07-17
        相关资源
        最近更新 更多