<pre font-size:9.0pt><span><?php </span><span><em>
</em></span><span>
namespace
</span><span>OC\<strong>Session</strong></span><span>;
</span><span></span><span>
class
</span><span>redis<strong>Session</strong> </span><span>
implements
</span><span>\<strong>Session</strong>HandlerInterface{
</span><span></span><span><em>
</em></span><span><em></em></span><span>
private
</span><span>
$_options
</span><span>= </span><span>
array
</span><span>(
</span><span></span><span>
'handler'
</span><span>=> </span><span>null</span><span>, </span><span>
</span><span></span><span>
'host'
</span><span>=> </span><span>null</span><span>,
</span><span></span><span>
'port'
</span><span>=> </span><span>null</span><span>,
</span><span></span><span>
'lifeTime'
</span><span>=> </span><span>null</span><span>,
</span><span></span><span>)</span><span>;
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>__construct</span><span>(</span><span>
$options
</span><span>=</span><span>
array
</span><span>()){
</span><span></span><span>
if
</span><span>(!
class_exists
(</span><span>
"redis"
</span><span>, </span><span>false</span><span>)){
</span><span></span><span>
die
</span><span>(</span><span>
"必须安装redis扩展"
</span><span>)</span><span>;
</span><span></span><span>}
</span><span></span><span>
if
</span><span>(!</span><span>isset</span><span>(</span><span>
$options
</span><span>[</span><span>
'lifeTime'
</span><span>]) || </span><span>
$options
</span><span>[</span><span>
'lifeTime'
</span><span>] <span>0</span><span>){
</span><span></span><span>
$options
</span><span>[</span><span>
'lifeTime'
</span><span>] =
ini_get
(</span><span>
'<strong>Session</strong>.gc_maxlifetime'
</span><span>)</span><span>;
</span><span></span><span>}
</span><span></span><span>
$this
</span><span>-></span><span>_options </span><span>=
array_merge
(</span><span>
$this
</span><span>-></span><span>_options</span><span>, </span><span>
$options
</span><span>)</span><span>;
</span><span></span><span>}
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>begin</span><span>(){
</span><span></span><span>
if
</span><span>(</span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'host'
</span><span>] === </span><span>null </span><span>||
</span><span></span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'port'
</span><span>] === </span><span>null </span><span>||
</span><span></span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'lifeTime'
</span><span>] === </span><span>null
</span><span></span><span>){
</span><span></span><span>
return
false</span><span>;
</span><span></span><span>}
</span><span></span><span>
</span><span></span><span><strong>Session</strong>_set_save_handler(
</span><span></span><span>
array
</span><span>(</span><span>
$this
</span><span>, </span><span>
'open'
</span><span>)</span><span>,
</span><span></span><span>
array
</span><span>(</span><span>
$this
</span><span>, </span><span>
'close'
</span><span>)</span><span>,
</span><span></span><span>
array
</span><span>(</span><span>
$this
</span><span>, </span><span>
'read'
</span><span>)</span><span>,
</span><span></span><span>
array
</span><span>(</span><span>
$this
</span><span>, </span><span>
'write'
</span><span>)</span><span>,
</span><span></span><span>
array
</span><span>(</span><span>
$this
</span><span>, </span><span>
'destory'
</span><span>)</span><span>,
</span><span></span><span>
array
</span><span>(</span><span>
$this
</span><span>, </span><span>
'gc'
</span><span>)
</span><span> )</span><span>;
</span><span></span><span>}
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>open</span><span>(</span><span>
$savePath
</span><span>, </span><span>$<strong>Session</strong>Name</span><span>){
</span><span></span><span>
if
</span><span>(
is_resource
(</span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'handler'
</span><span>])) </span><span>
return
true</span><span>;
</span><span></span><span>
</span><span></span><span>
$redisHandle
</span><span>= </span><span>
new
</span><span>\Redis()</span><span>;
</span><span></span><span>
$redisHandle
</span><span>-></span><span>connect</span><span>(</span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'host'
</span><span>]</span><span>, </span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'port'
</span><span>])</span><span>;
</span><span></span><span>
if
</span><span>(!</span><span>
$redisHandle
</span><span>){
</span><span></span><span>
return
false</span><span>;
</span><span></span><span>}
</span><span></span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'handler'
</span><span>] = </span><span>
$redisHandle
</span><span>;
</span><span></span><span>
$this
</span><span>-></span><span>gc</span><span>(</span><span>null</span><span>)</span><span>;
</span><span></span><span>
return
true</span><span>;
</span><span></span><span>}
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>close</span><span>(){
</span><span></span><span>
return
</span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'handler'
</span><span>]-></span><span>close</span><span>()</span><span>;
</span><span></span><span>}
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>read</span><span>(</span><span>$<strong>Session</strong>Id</span><span>){
</span><span></span><span>
return
</span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'handler'
</span><span>]-></span><span>get</span><span>(</span><span>$<strong>Session</strong>Id</span><span>)</span><span>;
</span><span></span><span>}
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>write</span><span>(</span><span>$<strong>Session</strong>Id</span><span>, </span><span>$<strong>Session</strong>Data</span><span>){
</span><span></span><span>
return
</span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'handler'
</span><span>]-></span><span>setex</span><span>(</span><span>$<strong>Session</strong>Id</span><span>, </span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'lifeTime'
</span><span>]</span><span>, </span><span>$<strong>Session</strong>Data</span><span>)</span><span>;
</span><span></span><span>}
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>destroy</span><span>(</span><span>$<strong>Session</strong>Id</span><span>){
</span><span></span><span>
return
</span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'handler'
</span><span>]-></span><span>
delete
</span><span>(</span><span>$<strong>Session</strong>Id</span><span>) >= </span><span>1 </span><span>? </span><span>true </span><span>: </span><span>false</span><span>;
</span><span></span><span>}
</span><span></span><span><em>
</em></span><span><em></em></span><span>
public
function
</span><span>gc</span><span>(</span><span>
$lifeTime
</span><span>){
</span><span></span><span>
</span><span></span><span>
$this
</span><span>-></span><span>_options</span><span>[</span><span>
'handler'
</span><span>]-></span><span>keys</span><span>(</span><span>
"*"
</span><span>)</span><span>;
</span><span></span><span>
return
true</span><span>;
</span><span></span><span>}
</span><span>}</span></span></span>