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