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 相关文章推荐
将数组写入txt文件 var_export
Apr 21 PHP
php getsiteurl()函数
Sep 05 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
zf框架db类的分页示例分享
Mar 14 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
php编写的一个E-mail验证类
Mar 25 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
thinkphp5实现微信扫码支付
Dec 23 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
图书管理程序(一)
2006/10/09 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
几个高效,简洁的字符处理函数
2007/04/12 Javascript
firefox插件Firebug的使用教程
2010/01/02 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
Js组件的一些写法
2010/09/10 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
Django中间件基础用法详解
2019/07/18 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
.net软件工程师应聘上机试题
2015/03/10 面试题
教师先进工作者事迹材料
2014/05/01 职场文书
检讨书怎么写
2015/05/07 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技