php zend framework 教程,Zend Framework入门教程之Zend_Session会话操作详解
本文实例讲述了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会话操作详解相关推荐
- bpmn如何查看代码 idea_IDEA教程之Activiti插件图文详解
本文作者:Spring_ZYL 文章来源:https://blog.csdn.net/gozhuyinglong 版权声明:本文版权归作者所有,转载请注明出处 一.安装Activiti插件 1.搜索插 ...
- pytorch教程之nn.Module类详解——使用Module类来自定义网络层
前言:前面介绍了如何自定义一个模型--通过继承nn.Module类来实现,在__init__构造函数中申明各个层的定义,在forward中实现层之间的连接关系,实际上就是前向传播的过程. 事实上,在p ...
- pytorch教程之nn.Module类详解——使用Module类来自定义模型
pytorch教程之nn.Module类详解--使用Module类来自定义模型_MIss-Y的博客-CSDN博客_nn是什么意思前言:pytorch中对于一般的序列模型,直接使用torch.nn.Se ...
- python教程三角函数_Python入门之三角函数tan()函数实例详解
描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 m ...
- mindi linux 使用教程,Linux使用入门教程之tuned
tuned是RHEL6推出的调优工具,可以简单.动态的调整系统.默认的tuned软件包包含9个调优配置文件,对laptop.desktop.server系统的省电策略.磁盘调度算法.缓存.内存脏页回写 ...
- smtplib python教程_Python模块入门教程之smtplib 邮件发送
Python的smtplib提供了一种很方便的途径发送电子邮件.它对smtp协议进行了简单的封装. smtp协议的基本命令包括: HELO 向服务器标识用户身份 MAIL 初始化邮件传输 mail f ...
- MySQL基础教程之IN的用法详解
MySQL IN 语法 IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下: ? 1 2 WHERE column IN (value1,value2,...) WHERE ...
- java的继承实例_java教程之java继承示例详解
这篇文章主要介绍了java继承示例详解,需要的朋友可以参考下 什么是继承(extends)? 继承是:新定义的类是从已有的类中获取属性和方法的现象. 这个已有的类叫做父类, 从这个父类获取属性和方法的 ...
- HealthKit开发快速入门教程之HealthKit数据的操作
HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知 ...
最新文章
- 美国劳工统计局使用机器学习自动执行数据编码
- V神:随着时间的推移,我对链外数据L2越来越悲观
- php nodejs 前台,NodeJS之前端注册页面
- Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文、过程原理、关键步骤等相关配图
- P1582 倒水(二进制)
- .13-Vue源码之patch(3)(终于完事)
- SpringBoot maven打包源码发布到仓库配置
- 51 nod 1522 上下序列——序列dp
- 金蝶k3rpc服务器不可用_金蝶KIS商贸版常见问题这样解决
- qt createtor 中文乱码
- linux下访问西门子S7,Siemens SIMATIC S7-1200 CPU开放重定向漏洞(CVE-2015-1048)
- 创建XML文件以及XML中的节点和更新Xml文件中的节点的值
- 鼠标移开事件(onmouseout)
- BIGO 使用 Flink 做 OLAP 分析及实时数仓的实践和优化
- Android音视频开发之-WebRTC技术实践
- oracle怎么装测试库,测试库csdb安装ORACLE_TEXT组件
- 腾讯云学生服务器还不如直接选轻量应用服务器
- 谢烟客---------Linux之Aho Weinberger Kernighan
- SEO魔法书-网站优化
- 什么是软件测试?软件测试的目的是什么?划分为哪几个阶段?