2015-02-09 9 views
1

На самом деле, я использую «стандартные» сессии менеджер конфигурации: http://framework.zend.com/manual/current/en/modules/zend.session.manager.htmlИспользование и настройка Zend Session и Zend Cache Memcached - Zend Framework 2,3

Я хочу использовать кэш и сохранить данные моей сессии в в кэше сервера (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', 
     ), 
    ), 
); 

ответ

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" 

Я восстановил "стандартную" Менеджер сеанса конфигурацию и кэш корректно работает. Когда я переведу весь сайт на сервер Apache, я изменю php.ini для использования memcached.

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

 Смежные вопросы

  • Нет связанных вопросов^_^