ZF2的Session处理

来源:互联网 发布:硬币摇卦的正确算法 编辑:程序博客网 时间:2024/06/11 14:57

ZendFramework之中,可以有多种办法去处理session。
这些全部都以session handler的设置而不同
一般情况下默认是以文件形式存储的
当然如果你要建立高性能网站
或许你会采用用缓存的形式来处理session
在zf2的session manager中,默认的session handler是通过一次设置以后而改变默认的
也就是说。你一旦改变了handler,那么下次还是会用这个handler来处理。
我这里是一段代码,用memcache去处理session
这个是在

?
module.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'factories'=> array(
      'MyCache'=> function ($sm) {
                $config= $sm->get('Config');
                $driver= $config['cache']['driver'];
                $cacheConfig= $config['cache'][$driver];
                $adapterPluginManager= StorageFactory::getAdapterPluginManager();
                switch($driver) {
                    case'mymemcached':
                        $adapterPluginManager->setInvokableClass($driver,'FrontBase\Cache\Memcached');
                        $servers= $cacheConfig['memcached_servers'];
                        $memcached_config= array(
                            'adapter'=> array(
                                'name'=> $driver,
                                'options'=> array(
                                    'servers'=> $servers,
                                    'ttl'=> $cacheConfig['default_ttl'],
                                ),
                            ),
                        );
                        $memcached= StorageFactory::factory($memcached_config);
                        return$memcached;
                        break;
                    case'myredis':
                        $adapterPluginManager->setInvokableClass($driver,'FrontBase\Cache\Redis');
                        $server= $cacheConfig['redis_servers'][0];
                        $redis_config= array(
                            'adapter'=> array(
                                'name'=> $driver,
                                'options'=> array(
                                    'server'=> $server,
                                ),
                            ),
                        );
                        $redis= StorageFactory::factory($redis_config);
                        return$redis;
                        break;
                }
            },
 
            'MySessionManager'=> function($sm) {
                $config= $sm->get('Config');
                $sessionConfig= $config['session'];
                $saveHandler= $sessionConfig['save_handler'];
                switch($saveHandler) {
                    case'Cache':
                        $cache= $sm->get('MyCache');
                        $sessionCache= clone $cache;
                        $sessionCache->getOptions()->setNamespace('mysession')->setTtl($sessionConfig['expiration']);
                        $saveHandler= new Cache($sessionCache);
                        $manager= new ZendSessionManager();
                        $manager->setSaveHandler($saveHandler);
                        return$manager;
                        break;
                }
            },
 
            'Account\Helpers\Captcha'=> function($sm) {
                $sessionManager= $sm->get('MySessionManager');
                $captcha= new Captcha\Captcha($sessionManager);
                return$captcha;
            },
    );

如果调用了验证码的服务,那么这套session体系才会运转,否则这套session体系就不运转。

0 0