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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
关于js与php互相传值的介绍
Jun 25 PHP
phpmailer中文乱码问题的解决方法
Apr 22 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 PHP
PHP常用技巧汇总
Mar 04 PHP
php技巧小结【推荐】
Jan 19 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 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
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
python根据经纬度计算距离示例
2014/02/16 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
Python绘制股票移动均线的实例
2019/08/24 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
渡河少年教学反思
2014/02/12 职场文书
写给老婆的检讨书
2014/02/21 职场文书
詹天佑教学反思
2014/04/30 职场文书
文体活动总结范文
2014/05/05 职场文书
答谢会策划方案
2014/05/12 职场文书
十佳少年事迹材料
2014/12/25 职场文书
高中生毕业评语
2014/12/30 职场文书
财务出纳岗位职责
2015/03/31 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python