N1 Z) _' ~+ a/ S' J F# c9 T% { 9 z8 g2 r- x3 W, }( c/ ? |5 L* {, v4 }( d: L
答案速查 ! T- p* j" n8 p2 L, P1:E % J6 J, K2 ^+ X; U: [2:setcookie/setrawcookie # Z. _- x. n% h2 P3:B' ?2 d6 t$ |7 [3 E" y8 d9 ~2 j4 p9 r+ K
4:BD; U7 Y. M U- B! e3 v
5:BD - h3 K1 t7 `! R6:D * |4 ~) k( A! \: A4 M7:A 7 l) v4 Y- [$ \9 E+ K' G5 Z8:B ( ^/ \$ n/ {2 L: B$ l S9:C 3 D2 ]1 c7 Q( r, r, D. q0 r10:B; l' T, h5 y9 k% X+ Y
11:E! v( D( j0 h8 F n" Z1 a3 M& S9 P
12:A4 c- p8 }+ M0 E9 {" L& l7 i, I
13:BD - m) D3 h& O7 b# m14:B * i0 ] V! \% J& D9 E9 C15:nl2br $ u4 I: A# _; c& J) ~0 Q# B- Z6 ^, i
: r. k. R6 m" U w8 Z
( I' B9 U* o) ~! m
答案详解 , e+ @' A/ P5 ]- Q. M; ]4 {9 o" z+ j0 @" w7 ], Z$ _
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。 * ]6 e) n! [; s, Z8 }! B1 h+ n) Z7 |4 s6 a
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。6 v6 ?7 r0 m$ x, h7 }/ q+ w
+ v; T# p+ E5 w6 j4 J8 _; B% F
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。 7 G# r4 U7 ~ V T: U4 Z7 V - _2 s) s$ `4 J, ]0 w4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。 1 u+ d- i/ E' _5 z* m- ~. m) X; n* `: t
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。, k! V* y# W) V+ m0 S! [
1 K D, B! X E4 c! U* @& g
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。* a' K- n3 z' F
$ ~8 K @7 n9 t0 s, P0 G q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。3 b r2 m" j! w6 i3 j8 r) {
' E+ y1 Z5 ?+ D% ?( H
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。 & A! t0 b' x. m " U9 U$ z- I! b# q0 |7 I; Z6 S9 S9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。 * d& J; o' [- h+ w) H2 ]4 N' S! x2 N! z) j
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。 ; Z0 T( a- |. l* z" I% g8 ]3 r* l3 e9 ?+ z4 Q' W/ H
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 4 b+ a1 d0 k$ y/ p7 z) a& T( M) r, k7 E, f! u
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。+ u1 m% [( d0 `+ [: p- x# T
( D* k x" w5 h7 Y |' e13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。, h8 V T* _6 M4 j! O2 h$ N