本文实例讲述了Zend Framework入门教程之Zend_Session会话操作。分享给大家供大家参考,具体如下:

会话命名空间

实现会话

代码:

require_once "Zend/Session/Namespace.php";

$myNamespace = new Zend_Session_Namespace('Myspace');

if(isset($myNamespace->numberOfPageRequests))

{

$myNamespace->numberOfPageRequests++;

}else{

$myNamespace->numberOfPageRequests = 1;

}

echo "用户的浏览次数为:";

echo "";

echo $myNamespace->numberOfPageRequests;

echo "次";

结果:

用户的浏览次数为:10次

遍历会话命名空间

代码:

require_once "Zend/Session/Namespace.php";

$myNamespace = new Zend_Session_Namespace('Myspace');

$myNamespace->webhost = "127.0.0.1";

$myNamespace->hostname = "localhost";

$myNamespace->user = "root";

$myNamespace->password = "123456";

$myNamespace->db_name = "test";

$myNamespace->db_type = "Sqlite";

foreach($myNamespace as $index=>$value){

echo "命名空间myNamespace中的:".$index;

echo "为".$value."

\n";

}

结果:

命名空间myNamespace中的:webhost为127.0.0.1

命名空间myNamespace中的:hostname为localhost

命名空间myNamespace中的:user为root

命名空间myNamespace中的:password为123456

命名空间myNamespace中的:db_name为test

命名空间myNamespace中的:db_type为Sqlite

点评:

它会把这个对象所对应空间中的所有内容遍历出来。很神奇。

访问会话命名空间

代码:

require_once "Zend/Session/Namespace.php";

$login = new Zend_Session_Namespace('other');

$login->user = "Administrator";

if(isset($login->user)){

echo "\$login->user已经有值,其值为:";

echo $login->user;

unset($login->user);

}else{

echo "\$login->user无值";

}

echo "

";

if(isset($login->pass)){

echo "\$login->pass已经有值,其值为:";

echo $login->pass;

unset($login->pass);

}else{

echo "\$login->pass无值";

}

foreach($login as $index=>$value){

echo "命名空间login中的:".$index."为".$value."

\n";

}

结果:

$login->user已经有值,其值为:Administrator

$login->pass无值

会话的高级应用

开启会话,有两种方法

一、使用Zend_Session::start()开启会话

二、new Zend_Session_Namespace()

锁定会话命名空间

代码:

require_once "Zend/Session/Namespace.php";

$test = new Zend_Session_Namespace('test');

$test->name = "玉皇大帝";

$test->sex = "男";

$test->lock();

if($test->isLocked()){

echo "会话\$test已经锁定!

";

echo "命名空间\$test中的成员name的值为:";

echo $test->name;

}else{

echo "会话\$test已经解锁!";

}

echo "

";

$test->unLock();

if($test->isLocked()){

echo "会话\$test已经锁定!

";

echo "命名空间\$test中的成员name的值为:";

echo $test->name;

}else{

echo "会话\$test已经解锁!";

}

结果:

会话$test已经锁定!

命名空间$test中的成员name的值为:玉皇大帝

会话$test已经解锁!

点评:

由此可见,锁定并不影响结果的输出。

分析源代码

public function lock()

{

self::$_namespaceLocks[$this->_namespace] = true;

}

/**

* unlock() - unmark a session/namespace to enable read & write

*

* @return void

*/

public function unlock()

{

unset(self::$_namespaceLocks[$this->_namespace]);

}

/**

* unlockAll() - unmark all session/namespaces to enable read & write

*

* @return void

*/

public static function unlockAll()

{

self::$_namespaceLocks = array();

}

/**

* isLocked() - return lock status, true if, and only if, read-only

*

* @return bool

*/

public function isLocked()

{

return isset(self::$_namespaceLocks[$this->_namespace]);

}

可知,它只是改变了参数而已。

为会话设置生命周期

setExpirationSeconds()方法与setExpirationHops()两种方法来设置。

代码:

require_once "Zend/Session/Namespace.php";

$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设置生命期

";

设置生命期代码,其实它针对的是命名空间来设置的。

测试代码:

require_once "Zend/Session/Namespace.php";

$b = new Zend_Session_Namespace('temp');

echo "\$b->a内容为:".$b->a;

echo "

";

echo "\$b->p内容为:".$b->p;

先执行设置生命期代码,在执行测试代码会看到效果。

第一次:

$b->a内容为:苹果

$b->p内容为:梨

第二次:

$b->a内容为:苹果

$b->p内容为:梨

第三次:

$b->a内容为:

$b->p内容为:梨

第四次:

$b->a内容为:

$b->p内容为:

点评:刷新两次之后,就会有消失。之后陆续消失。超过60秒效果相同。

分析源代码,

public function setExpirationSeconds($seconds, $variables = null)

{

if (parent::$_writable === false) {

/**

* @see Zend_Session_Exception

*/

require_once 'Zend/Session/Exception.php';

throw new Zend_Session_Exception(parent::_THROW_NOT_WRITABLE_MSG);

}

if ($seconds <= 0) {

/**

* @see Zend_Session_Exception

*/

require_once 'Zend/Session/Exception.php';

throw new Zend_Session_Exception('Seconds must be positive.');

}

if ($variables === null) {

// apply expiration to entire namespace

$_SESSION['__ZF'][$this->_namespace]['ENT'] = time() + $seconds;

} else {

if (is_string($variables)) {

$variables = array($variables);

}

foreach ($variables as $variable) {

if (!empty($variable)) {

$_SESSION['__ZF'][$this->_namespace]['ENVT'][$variable] = time() + $seconds;

}

}

}

}

其实它还是基于PHP原始的Session来实现的。只是扩展了部分功能。

public function setExpirationHops($hops, $variables = null, $hopCountOnUsageOnly = false)

{

if (parent::$_writable === false) {

/**

* @see Zend_Session_Exception

*/

require_once 'Zend/Session/Exception.php';

throw new Zend_Session_Exception(parent::_THROW_NOT_WRITABLE_MSG);

}

if ($hops <= 0) {

/**

* @see Zend_Session_Exception

*/

require_once 'Zend/Session/Exception.php';

throw new Zend_Session_Exception('Hops must be positive number.');

}

if ($variables === null) {

// apply expiration to entire namespace

if ($hopCountOnUsageOnly === false) {

$_SESSION['__ZF'][$this->_namespace]['ENGH'] = $hops;

} else {

$_SESSION['__ZF'][$this->_namespace]['ENNH'] = $hops;

}

} else {

if (is_string($variables)) {

$variables = array($variables);

}

foreach ($variables as $variable) {

if (!empty($variable)) {

if ($hopCountOnUsageOnly === false) {

$_SESSION['__ZF'][$this->_namespace]['ENVGH'][$variable] = $hops;

} else {

$_SESSION['__ZF'][$this->_namespace]['ENVNH'][$variable] = $hops;

}

}

}

}

}

处理放在了构造函数中。

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

php zend framework 教程,Zend Framework入门教程之Zend_Session会话操作详解相关推荐

  1. bpmn如何查看代码 idea_IDEA教程之Activiti插件图文详解

    本文作者:Spring_ZYL 文章来源:https://blog.csdn.net/gozhuyinglong 版权声明:本文版权归作者所有,转载请注明出处 一.安装Activiti插件 1.搜索插 ...

  2. pytorch教程之nn.Module类详解——使用Module类来自定义网络层

    前言:前面介绍了如何自定义一个模型--通过继承nn.Module类来实现,在__init__构造函数中申明各个层的定义,在forward中实现层之间的连接关系,实际上就是前向传播的过程. 事实上,在p ...

  3. pytorch教程之nn.Module类详解——使用Module类来自定义模型

    pytorch教程之nn.Module类详解--使用Module类来自定义模型_MIss-Y的博客-CSDN博客_nn是什么意思前言:pytorch中对于一般的序列模型,直接使用torch.nn.Se ...

  4. python教程三角函数_Python入门之三角函数tan()函数实例详解

    描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 m ...

  5. mindi linux 使用教程,Linux使用入门教程之tuned

    tuned是RHEL6推出的调优工具,可以简单.动态的调整系统.默认的tuned软件包包含9个调优配置文件,对laptop.desktop.server系统的省电策略.磁盘调度算法.缓存.内存脏页回写 ...

  6. smtplib python教程_Python模块入门教程之smtplib 邮件发送

    Python的smtplib提供了一种很方便的途径发送电子邮件.它对smtp协议进行了简单的封装. smtp协议的基本命令包括: HELO 向服务器标识用户身份 MAIL 初始化邮件传输 mail f ...

  7. MySQL基础教程之IN的用法详解

    MySQL IN 语法 IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下: ? 1 2 WHERE column IN (value1,value2,...) WHERE ...

  8. java的继承实例_java教程之java继承示例详解

    这篇文章主要介绍了java继承示例详解,需要的朋友可以参考下 什么是继承(extends)? 继承是:新定义的类是从已有的类中获取属性和方法的现象. 这个已有的类叫做父类, 从这个父类获取属性和方法的 ...

  9. ​HealthKit开发快速入门教程之HealthKit数据的操作

    ​HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知 ...

最新文章

  1. 美国劳工统计局使用机器学习自动执行数据编码
  2. V神:随着时间的推移,我对链外数据L2越来越悲观
  3. php nodejs 前台,NodeJS之前端注册页面
  4. Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文、过程原理、关键步骤等相关配图
  5. P1582 倒水(二进制)
  6. .13-Vue源码之patch(3)(终于完事)
  7. SpringBoot maven打包源码发布到仓库配置
  8. 51 nod 1522 上下序列——序列dp
  9. 金蝶k3rpc服务器不可用_金蝶KIS商贸版常见问题这样解决
  10. qt createtor 中文乱码
  11. linux下访问西门子S7,Siemens SIMATIC S7-1200 CPU开放重定向漏洞(CVE-2015-1048)
  12. 创建XML文件以及XML中的节点和更新Xml文件中的节点的值
  13. 鼠标移开事件(onmouseout)
  14. BIGO 使用 Flink 做 OLAP 分析及实时数仓的实践和优化
  15. Android音视频开发之-WebRTC技术实践
  16. oracle怎么装测试库,测试库csdb安装ORACLE_TEXT组件
  17. 腾讯云学生服务器还不如直接选轻量应用服务器
  18. 谢烟客---------Linux之Aho Weinberger Kernighan
  19. SEO魔法书-网站优化
  20. 什么是软件测试?软件测试的目的是什么?划分为哪几个阶段?

热门文章

  1. linux驱动加载流程分析
  2. PWM整流技术的具体应用
  3. matlab:申请贷款问题
  4. 在SQL Server 2008中删除表中的记录时出错,该如何解决
  5. 安卓开发者必备的42个链接
  6. 考研英语记住这些万能句型,写作必拿高分!
  7. 安装win7虚拟机和orCAD软件
  8. ftp服务器vsftpd配置文件,最全面的vsftpd配置文件详解
  9. kmyb.km.gov.cn昆明医保网怎么了?
  10. sql server 的after触发器之insert触发器实例