免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1676 | 回复: 1
打印 上一主题 下一主题

从一道php面试题说起 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-13 15:04 |只看该作者 |倒序浏览
从一道php面试题说起



面试题目:





Php代码
  1. setcookie(‘name’,'test');   
  2. echo $_cookies['name'];  
复制代码
请说出程序结果(能说出第一次与第二次的区别者加分)
  1. setcookie(‘name’,'test');
  2. echo $_cookies['name'];
复制代码
请说出程序结果(能说出第一次与第二次的区别者加分) 本来一开始我认为不就是设置一个cookie,然后读出来的问题,但是被那个后面的提示搞迷惑了从来没有想过这样的问题。面试的时候也没有想出答案,后来在面试官的指点下搞清楚了。



答案:





Php代码
  1. 1.第一次为空   
  2. 2.第二次输出 test   
复制代码
解释:cookies是保存在客户端的,服务器要想获得cookie必须是客户端通过http的header传递给服务器。   
  
第一次:首先设置一个cookie值,然后读取cookie值(由于第一次客户端没有传递cookie给服务器),没有cookie值   
第二次:cookie值传递给了服务器,就读出来了  

1.第一次为空
2.第二次输出 test

解释:cookies是保存在客户端的,服务器要想获得cookie必须是客户端通过http的header传递给服务器。

第一次:首先设置一个cookie值,然后读取cookie值(由于第一次客户端没有传递cookie给服务器),没有cookie值
第二次:cookie值传递给了服务器,就读出来了  
在面试官的指点后,我才想起来了之前有项目的bug与这个有关,但是换个方法避开了。



碰巧这几天看php手册看到了setcookie中有这样一段代码:





Php代码
  1. <?php   
  2. // set the cookies   
  3. setcookie("cookie[three]", "cookiethree");   
  4. setcookie("cookie[two]", "cookietwo");   
  5. setcookie("cookie[one]", "cookieone");   
  6.   
  7. // after the page reloads, print them out   
  8. if (isset($_COOKIE['cookie'])) {   
  9.     foreach ($_COOKIE['cookie'] as $name => $value) {   
  10.         $name = htmlspecialchars($name);   
  11.         $value = htmlspecialchars($value);   
  12.         echo "$name : $value <br />\n";   
  13.     }   
  14. }   
  15. ?>   
  16.   
  17. 亮点   
  18. // after the page reloads, print them out  

  19. <?php
  20. // set the cookies
  21. setcookie("cookie[three]", "cookiethree");
  22. setcookie("cookie[two]", "cookietwo");
  23. setcookie("cookie[one]", "cookieone");

  24. // after the page reloads, print them out
  25. if (isset($_COOKIE['cookie'])) {
  26.     foreach ($_COOKIE['cookie'] as $name => $value) {
  27.         $name = htmlspecialchars($name);
  28.         $value = htmlspecialchars($value);
  29.         echo "$name : $value <br />\n";
  30.     }
  31. }
  32. ?>

  33. 亮点
  34. // after the page reloads, print them out
复制代码
我想这个提示太低调了,我想我们很多人在在调试





Php代码
  1. setcookie(‘name’,'test');   
  2. echo $_cookies['name'];  

  3. setcookie(‘name’,'test');
  4. echo $_cookies['name'];
复制代码
第一次没有值,然后刷新一下出来了,就以为没问题了,就不想这个问题是为什么。



都说手册很重要,但是手册这么多东西,你能保证你看手册的时候就一定会注意到这个地方的代码。于是我很好奇,面试官是在什么情景下遇到这个问题的,于是问了一下面试官,得到了以下回答:





Php代码
  1. 呵呵,认证 应该算 所有web项目的 最开始,也是最重要的一个环节。   
  2.   
  3. 所以,对认证这块,需要很熟悉。   
  4.   
  5. 这个问题 主要是考  COOKIE 是什么时候被服务端发往浏览器, 浏览器又是什么时候传递给服务器的。   

  6. 呵呵,认证 应该算 所有web项目的 最开始,也是最重要的一个环节。

  7. 所以,对认证这块,需要很熟悉。
复制代码
这个问题 主要是考  COOKIE 是什么时候被服务端发往浏览器, 浏览器又是什么时候传递给服务器的。
  
确实如果从这个角度出发,就有可能发现这个问题。然后面试官也说,他也才知道手册上有这个东西。



最后确实手册很重要,但是也太低调了,如果你发现手册中类似如此低调的问题,请分享一下,我也准备收集一下手册中低调的问题。

论坛徽章:
0
2 [报告]
发表于 2012-01-13 15:04 |只看该作者
收藏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP