方法2:使用下面的程序设置 $savePath = \ $lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime); session_start();
方法3:使用函数setcookie()或session_set_cookie_params($lifeTime)设置
6.解决HTTP无状态本质,可以从以下几个方面入手。
(1)利用form表单的隐藏域hidden,在表单数据提交时传递参数,这种方法需要和form表单一起使用。
(2)利用超链接通过URL查询字符串传递参数。
(3)使用header()函数重定向功能或JavaScript重定向功能,通过URL查询字符串传递参数。
(4)使用Cookie将浏览器用户的个人资料存放在浏览器端主机中,其他PHP程序通过读取浏览器端主机中的Cookie信息实现页面间的参数传递。
(5)使用Session将浏览器用户的个人资料存放于WEB服务器中,其他PHP程序通过读取服务器端主机中的Session信息实现页面间的参数传递。 7.
通过了解 SESSION 的工作原理,可以发现,在默认情况下,各个服务器会各自分别对同一个客户端产生SESSION ID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而B服务器生成的则是c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 数据都是分别保存在本服务器的文件系统中。确定了问题所在之后,就可以着手进行解决了。想要共享 SESSION 数据,那就必须实现两个目标:
一个是各个服务器对同一个客户端产生的 SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的 COOKIE;
另一个是 SESSION 数据的存储方式/位置必须保证各个服务器都能够访问到。 简单地说就是多服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION数据。 第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置(将域名设置为父子关系)即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的。cookie可以跨越子域名。比如我们在xiaofeicn.com下面注册个个cookie,那么可以在bbs.xiaofeicn.com上读取到该cookie。 第二个目标的实现方法是所有的WEB服务器的SESSION存放在一个文件服务器(或者数据库服务器)上。例如:采用一台Mysql服务器做共享服务器,把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。
三、编程题
1.使用Cookie技术编写程序显示上次登录时间。
if(isset($_COOKIE['last_visit'])){
echo \你上次登陆时间是:\
setCookie(\}else{
echo \你是第一次登陆!\
setCookie(\} ?>
2.编写支持换皮肤的PHP程序,并将皮肤保存在Cookie中。
程序说明,此题关键在于:
? 如果GET请求以及Cookie里面都没有设置皮肤,则使用默认皮肤 ? 如果Cookie里面有皮肤,则使用Cookie里的皮肤
? 如果GET请求里面有皮肤,则使用GET请求的有皮肤,并将GET请求的皮肤设置到
Cookie中1分钟
1.准备JPG皮肤图片,分别将其命名为1.jpg、2.jpg、3.jpg、4.jpg。 2.创建目录images,将所有皮肤图片文件置于该目录下。
3.创建skin.php文件,写入如下代码:
//如果GET请求以及Cookie里面都没有设置皮肤,则使用默认皮肤 if(!isset($_GET[\ $source = \}
//如果Cookie里面有皮肤,则使用Cookie里的皮肤 if(isset($_COOKIE[\ $source = $_COOKIE[\}
//如果GET请求里面有皮肤,则使用GET请求的有皮肤,并将GET请求的皮肤设置到Cookie中1分钟
if(isset($_GET[\ $source = $_GET[\
setcookie(\} ?>
3.编写PHP程序判断浏览器是否开启Cookie。
程序说明,此题关键在于:
? 页面重定向时,如果重定向到页面自己本身,如何防止重定向死循环。
if(!isset($_GET['set'])){ setcookie('test','test'); $url = 'http://';
$url.= $_SERVER['HTTP_HOST']; $url.= $_SERVER['PHP_SELF']; $url.= '?set=yes';
header('Location:'.$url); }else{
if(empty($_COOKIE['test'])){ echo \浏览器关闭了Cookie!请开启浏览器Cookie后再访问本网站!\ }else{ echo \浏览器开启了Cookie!\ } } ?> 4.
创建createExcel.php文件,写入如下代码:
function createExcel($database,$tableName){ $host = 'localhost'; $userName = 'root'; $password = ''; mysql_connect($host,$userName,$password); mysql_select_db($database); mysql_query(\ //制作表格(边框宽度为1) echo \ //制作表头(也就是表中拥有的字段) $sql = \ $result = mysql_query($sql); $fieldsNum = mysql_num_fields($result); echo \ for($i=0;$i<$fieldsNum;$i++){ echo \
} echo \ //导出10行记录 while($row = mysql_fetch_array($result)){ echo \ for($i=0;$i<$fieldsNum;$i++){ echo \ } echo \ } echo \}
header(\header(\createExcel('register','users'); ?>
第12章答案:
选择题:
C(说明:从 PHP4.2.0开始,除非已经给定了一个伪随机整数列,否则不再需要用rand()函数初始化随机数生成器。此外,即使随机数生成器没有被事先播种,脚本仍然会生成49个伪随机字符。尽管$array变量是字符串,但可以用访问数组的方式进行访问——使用数字索引访问某个位置上的字符。最后,for循环将从1开始执行到50,也就是执行了49次。) B A
B,D(说明:本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量?$ss,而$s自己并没有被改变。因此答案是B和D。)
B(说明:虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。) B D A D D D B
B,D,E(注意D选项a为常量,当然该常量并没有定义,此时该常量的值为常量名) A,D C
B,D(说明:pack 函数能对二进制数据进行复杂的格式化,包括将字符串中的字符转化成
十六进制表示。bin2hex 函数也有同样的转化功能。注意,printf()能将整数转化成十六进制数,但无法转化字符串。) B
填空题: nl2br
str_pad 函数(说明:它可以把字符串填充到指定长度)
mb_convert_encoding($str, 'GBK', ' UTF-8')或者 iconv(' UTF-8', 'GBK', $str) explode,implode 对空格的转义不同
strip_tages(注释:第二个空有歧义,该书第二版删除第二个空) substr($a,0,1)和$a{0}
跟起始标志的一样,且结束标志前也要一个换行,后面加上分号。 问答题:
方法1参见教材第7章问答题 方法2:
function changeStyle(&$str) { $arrStr=explode('_',$str); foreach($arrStr as $key=>$value){ $arrStr[$key]=strtoupper(substr($value,0,1)).substr($value,1); } return implode('',$arrStr); }
$s = \echo changeStyle ($s); ?>
方法3:
function changeStyle(& $str){ $str = str_replace (\ $str = ucwords ($str); $str = str_replace (\ return $str; }
$s = \echo changeStyle ($s); ?>
function reverse($str){ $len = mb_strlen(\ $new_string = \ for ($i=$len;$i>=0;$i--){
$new_string .= mb_substr($str,$i,1,'gbk');