1

実際、私は「標準」のセッションマネージャー構成を使用しています: http://framework.zend.com/manual/current/en/modules/zend.session.manager.html

パフォーマンスとスケーラビリティを向上させるために、キャッシュを使用してセッションのデータをサーバーのキャッシュ (memcached) に保存したいと考えています。

php.ini を次のように設定します (localhost memcached):

session.save_handler=memcached
session.save_path= "tcp://127.0.0.1" 

そして、このエラーが表示されます:

Warning: session_start(): Cannot find save handler 'memcached' - session startup failed in C:\Program Files (x86)\xampp\htdocs\Zend-application\vendor\zendframework\zendframework\library\Zend\Session\SessionManager.php on line 98

config/autoload/global.phpそのため、との設定方法がわかりませんmodule/application/module.php。memcached とキャッシング全般を実装したいのは初めてです。本当にありがとう!

私はこのように変更しようとしましたmodule/application/module.php

---add session and cache ---

use Zend\Session\Config\SessionConfig;
use Zend\Session\Container;
use Zend\Cache\StorageFactory;
use Zend\Session\SaveHandler\Cache;
use Zend\Session\SessionManager;
use Zend\Session\Validator\HttpUserAgent;
use Zend\Session\Validator\RemoteAddr;

--- end session and cache ---

    public function onBootstrap($e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
        $this->initSession(array(
    'remember_me_seconds' => 180,
    'use_cookies' => true,
    'cookie_httponly' => true,
    'validators' => array(
    'Zend\Session\Validator\RemoteAddr',
    'Zend\Session\Validator\HttpUserAgent',
    'phpSaveHandler' => 'memcached',
    'savePath' => 'tcp://127.0.0.1',
  )
));
    }

public function initSession($config)
{
  $sessionConfig = new SessionConfig();
  $sessionConfig->setOptions($config);
  $sessionManager = new SessionManager($sessionConfig);
  $sessionManager->getValidatorChain()
          ->attach(
          'session.validate',
            array(new HttpUserAgent(), 'isValid')
          )
          ->attach(
            'session.validate',
            array(new RemoteAddr(), 'isValid')
          );

  $cache = StorageFactory::factory(array(
    'adapter' => array(
    'name' => 'memcached',
    'options' => array(
    'server' => '127.0.0.1',
  ),
)
));

$saveHandler = new Cache($cache);
$sessionManager->setSaveHandler($saveHandler);
$sessionManager->start();

Container::setDefaultManager($sessionManager);

}

しかし、それはこのエラーを示しています:

    Warning: ini_set() expects parameter 2 to be string, array given in C:\Program Files (x86)\xampp\htdocs\Zend-application\vendor\zendframework\zendframework\library\Zend\Session\Config\SessionConfig.php on line 88

Fatal error: Call to undefined method Zend\Stdlib\CallbackHandler::attach() in C:\Program Files (x86)\xampp\htdocs\Zend-application\module\Application\Module.php on line 68

これは私のconfig/autoload/global.php

    return array(
   'db' => array(
      'driver'  => 'Pdo_Mysql',
      'charset' => 'utf-8',
      'dsn'            => 'mysql:dbname=mydb;host=localhost',
      'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),

   ),
   'service_manager' => array(
      'factories' => array(
         'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',

      ),
   ),
   'session' => array(
        'config' => array(
            'class' => 'Zend\Session\Config\SessionConfig',
            'options' => array(
                'name' => 'zend-application',
            ),
        ),
        'storage' => 'Zend\Session\Storage\SessionArrayStorage',
        'validators' => array(
            'Zend\Session\Validator\RemoteAddr',
            'Zend\Session\Validator\HttpUserAgent',
        ),
    ),
);
4

1 に答える 1

1

それが誰かを助けることを願って、私は私の問題を解決しました。私は Win7 環境で作業していますが、memcached が動作しません! 私が変更され :

    session.save_handler=memcached
    session.save_path= "tcp://127.0.0.1" 

    session.save_handler=memcache
    session.save_path= "tcp://127.0.0.1:11211" 

「標準」のセッション マネージャー構成を復元し、memcache が正しく動作するようになりました。サイト全体を apache サーバーに転送するときに、memcached を使用するように php.ini を変更します。

http://framework.zend.com/manual/current/en/modules/zend.session.manager.html

于 2015-02-22T14:47:10.303 に答える