PHP脚本的10个技巧(2)


Posted in PHP onOctober 09, 2006

会话用法
PHP 4.0有一个一直为人所期待的特性,这就是PHP的会话(session)支持。相比之下,PHP 3.0的用户则不得不使用第三方的程序库或完全不能具备这项功能。缺乏会话支持能力是PHP最大的缺陷之一,也是它最受人指摘的地方。不过,随着会话支持从早期测试版本的PHP 4.0开始就成为后者的一部分,这个障碍也荡然无存了。

有了会话支持,你就可以在用户访问网络站点期间维持用户特定的变量而无须象现在这样:设置多个cookie、使用隐蔽表单域或在你可能经常要连结的一个数据库内存储信息等。

在一个页面上启动会话就是告诉PHP引擎:你或是要开始一个会话(如果先前没有)或是继续目前的会话:

session_start();

启动一个会话将通过cookie向用户发送一个标识字符串(比如940f8b05a40d5119c030c9c7745aead9);在服务器端则会创建一个与此相匹配的临时文件,在以上例子中,其名称则是这个样子:sess_940f8b05a40d5119c030c9c7745aead9。该文件包含了注册的会话变量及其赋值。

用户访问计数器可谓使用会话的最常见实例:

启动你的PHP模块,保证PHP代码是文件的第一行:没有空白、没有HTML输出等等。这是因为,当会话函数发出一个文件头的时候,如果你在session_start()函数之前发送了空白或者HTML代码,系统即会报错。

<?
// if a session does not yet exist for this user, start one
session_start();

接下来,注册一个名为count的变量。

session_register('count');

注册变量就等于告诉了PHP:只要会话存在,一个名叫count的变量也就同时存在。目前这个变量还没有赋值。不过,如果你对它进行加1运算的话,该值即可被赋值为1:

$count++;

把以上各行代码一起考虑,实际上你已经启动了一个会话(如果先前没有)、为某个用户分配了会话id、注册了名为count的变量并把$count加1以表示用户首次访问页面:

要显示用户在当前会话下访问页面的次数,你只要打印出$count的值即可:

echo "<P>You've been here $count times.</p>";

整个访问计数器代码如下所示:

<?
session_start();
session_register('count');
$count++;
echo "<P>You've been here $count times.</p>";
?>

如果你重载以上脚本,你可以观察到计数值增加了。有意思吧?

你还可以在会话中注册数组。假设你有一个名为$faves的数组:

$faves = array ('chocolate','coffee','beer','linux');

你可以象其他单个变量一样注册该数组:

session_register('faves');

索引数组和索引其他单变量没有什么差别,比如$faves这样。如果你的用户想在Web站点的一个页面上展示自己的爱好,那么你完全可以把他喜欢的东西注册为一个名为$faves会话变量,然后你可以在其他页面上把这些值打印出来:

<?
session_start();
echo "My user likes:
<ul>";

while (list(,$v) = each ($faves)) {
echo "<li>$v"; }

echo "</ul>";
?>

这就是你要得到的:用户爱好的漂亮列表。

会话变量不能被查询字符串所覆盖,这就是说,你不能键入http:///www.yourdomain.com/yourscript.php?count=56 这样的指令为注册会话变量$count分配新值。这一点对安全而言是非常重要的:你只能在服务器端脚本上修改或者删除(未注册的)会话变量。

如果你想完全删除某个会话变量,你可以从系统中取消注册该变量:

session_unregister('count');

彻底删除某个会话,比如按下Logout按钮就是这样的例子,那么你可以写下如下的代码:

session_destroy();

使用会话来存储变量值可以让我们免于编写数据库处理代码的痛苦,这样也就不会过度增加对系统的负载,同时也减少了对专有数据库语法的使用范围,再说,你也不再非得向访问站点的用户发送一大堆cookie了。而现在呢——只需要一个cookie、一个变量就全部搞定了,真是一滴水就映出了全部光辉!实在是不能比这更简单的了。

PHP 相关文章推荐
聊天室php&amp;mysql(五)
Oct 09 PHP
用文本文件制作留言板提示(下)
Oct 09 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
php cookie工作原理与实例详解
Jul 18 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 PHP
PHP脚本的10个技巧(1)
Oct 09 #PHP
图书管理程序(三)
Oct 09 #PHP
一个从别的网站抓取信息的例子(域名查询)
Oct 09 #PHP
一个PHP+MSSQL分页的例子
Oct 09 #PHP
基于文本的留言簿
Oct 09 #PHP
图书管理程序(一)
Oct 09 #PHP
图书管理程序(二)
Oct 09 #PHP
You might like
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python中协程用法代码详解
2018/02/10 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
pandas数值计算与排序方法
2018/04/12 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
python用700行代码实现http客户端
2021/01/14 Python
Tomcat的缺省是多少,怎么修改
2014/04/09 面试题
造型师求职自荐信
2013/09/27 职场文书
大专毕业生自我鉴定
2013/11/21 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
中式结婚主持词
2014/03/14 职场文书
财务部绩效考核方案
2014/05/04 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书