PHP 4.0中最令人期待的特性应该是对对话的支持,PHP 3.0的用户必须使用第三方的软件否则就不能使用对话,不支持对话一直是PHP最大的缺憾之一。 只要用户在浏览你的网站,你就可以利用对话维护与特定用户有关的变量,而无需建立多个Cookie、使用隐藏表格字段或将信息存储在数据库中。 在一个网页上启动一个对话,就会使PHP引擎知道你想启动一个对话(如果还没有启动)或者继续当前的对话: session_start(); 启动一个对话将通过Cookie向用户发送一个识别字符串(例如940f8b05a40d5119c030c9c7745aead9),在服务器端,会创建一个与识别字符串匹配的临时文件,例如sess_940f8b05a40d5119c030c9c7745aead9,这个文件中包含注册的对话变量以及它们的值。 用来显示对话作用的最常见的例子是访问计数器。启动PHP模块,确保PHP代码是文件的第一行,在PHP代码之前不要有空格、HTML代码和其他的代码。因为对话会发送一个头部,因此如果在session_start()之前有空格和HTML代码,就会得到一个出错信息。 <? // 如果还不存在一个针对某用户的用户,则启动一个对话: session_start(); 然后注册一个名字为count的变量: session_register('count'); 注册一个对话变量后,只要对话存在,名字为count的变量也就存在。现在,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>"; ?> 如果重新加载上述的脚本文件,就会发现变量count的值增加了1,很酷吧。 还可以在对话中注册一个数组变量,假设我们注册了一个名字为$faves的变量: $faves = array ('chocolate','coffee','beer','linux'); 可以像注册一个简单变量那样注册一个数组变量: session_register('faves'); 引用数组变量与引用简单变量基本相同,如果一个用户在网页上指出在生活中的爱好时,可以把他的爱好注册到一个被称作$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'); 要完全删除一个对话变量的脚本如下所示: session_destroy(); 使用对话变量可以减少访问数据库的频率,使代码更加清晰,而且可以减少对用户发送Cookie的数量,它是最简单的方法了。 作者:马马 摘自:赛迪网 |