日期:2014-05-20 浏览次数:20828 次
上一节是在会话处理方面的基本应用。这一节和大家一起学习Zend_Session的高级应用,内容包括坐定会话命名空间、会话过期、会话封装与控制以及防止一个会话命名空间的多重实例等。
对于如何开启session就不用我多做描述了,方法:Zend_Session::start();
锁定会话的命名空间
为会话命名空间实例初始化对象并赋值后,有时为了特定的需要,会锁定会话命名空间,以防止其他内容对其值进行更改。
使用Zend_Session_Namespace的locked()方法可以锁定会话命名空间(就是将其改为只读状态)。
使用使用Zend_Session_Namespace的unLock()方法可以解除会话命名空间实例的锁定状态。
如果判断会话的命名空间是否处于锁定状态使用使用使用Zend_Session_Namespace的isLock() 。
示例:
//Zend_Sessoin的高级用法,锁定会话命名空间
$test=new Zend_Session_Namespace('test');
$test->name="李宇春";
$test->sex="男";
$test->lock();
if ($test->isLocked())
{
echo "会话\$test已经锁定!<p>";
echo "命名空间\$test中的成员name的值为:";
echo $test->name;
}
else
{
echo "会话已经解锁!";
}
echo "<p>";
$test->unlock();
if ($test->isLocked())
{
echo "会话\$test已经锁定!";
echo "命名空间\$test中的成员name的值为:";
echo $test->name;
}
else
{
echo "会话已经解锁!";
}
运行结果:
会话$test已经锁定!
命名空间$test中的成员name的值为:李宇春
会话已经解锁!
为会话设置声明周期
每个会话都有其生命期,默认情况下会话在关闭页面时结束生命期。通过Zend_session_Namespace的setExpirationSeconds()方法与setExpirationHops()方法可以为每个会话设置生命期。
两个方法的语法格式分别如下:
setExprirationSeconds($seconds,$variables=null);
其中,参数$seconds为指定的会话生命期的秒数,以数值型表示;可选参数$variables为指定的会话实力的成员,默认为空。执行该方法将会为会话实例成员(制定$variables参数)或者整个会话实例(不指定$variables参数)设置以$seconds参数指定的生命期。
setExpirationHops($hops,$variables=null,$hopCountOnUsageOnly=false);
其中,参数$hops未指定会话过期的步数,以数值型表示;可选参数$variables为指定的会话实例的成员,默认值为空;可选参数$hopCountOnUsageOly为布尔型变量,指定对象成员在使用时是否被计数一次,默认值为false。执行该方法将会为会话实例的成员活着整个会话实例设置以$hops参数指定的步数,当使用能够次数超过$hops值时,会话成员将失败!
示例:
$s=new Zend_Session_Namespace('temp');
$s->a='苹果';
$s->p='梨';
$s->o='桔子';
$s->setExpirationSeconds(60);
$s->setExpirationHops(2,'a');
$s->setExpirationHops(3,'p');
echo "已经为命名空间\$s设置生命周期"; */
我将此代码写到了inex控制器中的index方法里,下边代码写到了index控制器中的getsession方法中:
public function getsessionAction()
{
$s=new Zend_Session_Namespace('temp');
echo "\$s->a的内容为:".$s->a."<p>";
echo "\$s->p的内容为:".$s->p."<p>";
}
先执行方法1结果:
已经为命名空间$s设置生命周期
连续执行方法2 三次 时结果:
$a->a无值
$a->p有值
连续执行方法 2 四次时结果:
两个都没值
防止多重实例
为了防止多重实例的出现,可以在建立命名空间最后允许的实例时,传递true给第二个构造函数参数。在防止多重实例我不做过多解释了就是如下:
$space1=new Zend_Session_Namespace('space');
$space2=new Zend_Session_Namespace('space',true);
经过第二条语句的操作之后,之后初始化同一个命名空间都会导致一个异常抛出,这样即可防止多重实例。
今天把ie8升级到了9,发现ie9与csdn的编辑页面并不是很兼容。。应该是在文章内容自动保存过一次之后,就开始出现bug在线编辑器不能用鼠标选中,也不能使用在线编辑器的功能。 最新的火狐是米有问题的。。。。我是把内容写了一半才发现的。很是蛋疼,排版是我下载了个火狐进行排版的。。