市场游戏 现在你已经知道了基本的东西,再来点复杂的吧,演示一个现实生活中的session 应用。让我们假设一下,你有一个金融门户,它允许它的用户选择四支股票,然后显示每支股票的当前市场价格,并且在每一页 上显示用户在这个站点上的过程。 在下面的例子中,我们假定用户已经被验证过身份并且登录到站点上来了。我们使用了MySQL 数据库, 里面有一个名为user_info的表,用于存储用户的四支股票和唯一用户名。一旦一个session被初始化了,我 们注册变量保存用户名和四支股票,然后同数据库进行连接,取回值并显示在页面上。 代码如下: <?php //初始化一个session session_start(); //注册session变量 //用户名 session_register('username'); //选择的股票变量 session_register('stock1'); session_register('stock2'); session_register('stock3'); session_register('stock4'); //连接MySQL $db = mysql_connect("someserver.com", "tom", "jones"); //选择数据库 mysql_select_db("stock_db", $db); //使用SQL查询数据库 $query = "select stock_pref1,stock_pref2,stock_pref3,stock_pref4 from user_info where username='$username'"; $result = mysql_query($query,$db); //从数据库中取股票代码,并赋值给session变量 list($stock1,$stock2,$stock3,$stock4) = mysql_fetch_row($result); echo "Hi $username!<br>"; echo "Your selected stocks are:<br>"; echo "$stock1<br>"; echo "$stock2<br>"; echo "$stock3<br>"; echo "$stock4<br>"; // code to generate rest of page ?> PHP4有许多与session相关的函数 -- 大部分都不需要解释,把他们列在下面。 session_destroy() 释放所有的session数据(当一个用户从一个站点注销时非常有用,你需要释放掉在他访问期间的所创建 的所有变量)。 session_name() 设置或读取当前session的名字。 session_id() 设置或读取当前session的id值。 session_unregister(session_variable_name) 从一个特别的session注销一个变量。 session_is_registered() 检查是否一个session变量已经注册了。例如: <?php session_start(); if(session_is_registered(username)) { echo "A session variable by the name \"username\" already exists"; } else { echo "No variable named \"username\" registered yet. Registering..."; session_register(username); } ?> session_encode() and session_decode() 将session数据编码成字符串或将字符串解码成session数据。在这里你可能使用他们: <?php session_start(); session_register('someString'); $someString="I hate cats!"; //将所有的session变量编成一个字符串 $sessStr = session_encode(); //可以在这里看到 echo $sessStr; echo "<br><br>"; //在出现cats的地方用dogs进行替换 $sessStr = ereg_replace("cats","dogs",$sessStr); //解码后更新了session变量 session_decode($sessStr); //再显示一次$sessstr echo $someString; ?> 最后,在开始PHPLIB之前,有一个技术性问题你应该知道的 -- 上面所有的例子都使用了cookies在客 户端来保存session id值。但是如果用户的浏览器被设成拒绝cookies会怎么样呢? 如果发生这种情况,那就需要将一个session id通过嵌在url中从一页传递到另一页上去。例如: <a href="http://www.someserver.com/admin/preferences.php3? PHPSESSID=<? echo "$PHPSESSID"; ?>">Edit Your Portfolio! </a> 这个就可以保证在后面的页面中session变量是有效的。 |