邪罗刹的菠萝阁


> 呵呵,一直以来小邪就觉得在写程序的时候是不是漏了些什么,让PHP程序出现了瑕疵。
> 今天突然醒悟,原来还有 Cookie 没有搞定,这可是用户体验里很重要的一部分呢。

> 这篇文章大家就和小邪一起学用小甜饼吧,学得好的童鞋,奖励春哥侍寝一晚。
> 话说最近几天的前几篇文章,貌似有点水哈,因为过节的时候小邪也很水 O(∩_∩)O。

1. 了解 Cookie:

> Cookie 常用于识别用户身份,一般用于保存加密的账号和密码,(*^__^*) 。
> Cookies 是由服务器留在用户计算机中的一些信息文本文件所组成。
> 每当相同的计算机通过浏览器请求页面时,它同时会发送出去 Cookie。
> 这样,第二次进入这个网站的时候,就不用保存密码了哟。

2. PHP Cookie 存储与读取:

> 嘻嘻 (^o^),在这个地方填入你的昵称,然后点击确认按键即可。
> 程序就会将你的昵称存为 Cookie,然后读取并显示出来呢。

> 在 Cookie 失效(10分钟)之前,随便怎样调戏这个程序,都会显示这个样子咯。

> 牛叉的星际传送门 - http://www.evlos.org/apps/demo/cookie

3. 源代码讲解:

<?php
if (isset($_POST['user'])) { //首先检测是否获得了 POST 传递的昵称数据
	$div1 = 'style="display:none;"'; //有则隐藏昵称输入框,此字符串输出于 DIV 标签内
	$div2 = ''; //显示另外一个带欢迎语的显示 Cookie 的 DIV,嘿嘿
	setcookie('cookie_test',$_POST['user'],time()+600); //同时保存昵称为 Cookie
	$show = $_POST['user']; //显示昵称
}
else if (isset($_COOKIE["cookie_test"])) { //检测是否存在昵称Cookie
	$div1 = 'style="display:none;"'; //有则隐藏昵称输入框
	$div2 = ''; //显示一个带欢迎语的显示Cookie的DIV
	$show = $_COOKIE["cookie_test"]; //显示Cookie保存的昵称数据
}
else {
	$div1 = ''; //显示昵称输入框与按键
	$div2 = 'style="display:none;"'; //隐藏显示Cookie的DIV,因为这时无Cookie
	$show = ''; //纯初始化此变量
}
?>

4. 分段讲解:

> 注意!!Setcookie() 函数必须位于 标签之前。

<?php
	setcookie(name, value, expire, path, domain);
	//此函数用于设置 Cookie,Name为变量名,Value为变量值,Expire为存储时间
	//Path为路径,如果需要,一般都为"/",Domain为作用域,比如设置为".evlos.org"
	//那么此 Cookie 在所有 evlos.org 的子域名下面都是有效的喔
	echo $_COOKIE["user"];
	//显示变量名为 user 的 Cookie 内容
	print_r($_COOKIE);
	//显示所有本站的 Cookies
	setcookie("user", "", time()-3600000);
	//清楚 Cookie,也就是将存储时间变为负值即可
?>

5. WordPress 中的存储 Cookies 的变量:

> WP 程序会自动取出 Cookies 赋值到下面变量中,可以直接用在模板上的。

<?php echo $comment_author; //名称栏 ?>
<?php echo $comment_author_email; //邮箱栏 ?>
<?php echo $comment_author_url; //网址栏 ?>

6. 单独获取WP评论者昵称(站内,模板外):

> 这个是WP中定义COOKIEHASH常量的代码,嘎嘎 O(∩_∩)O。

/**
 * Used to guarantee unique hash cookies
 * @since 1.5
 */
define('COOKIEHASH', md5(get_option('siteurl')));
echo $_COOKIE['comment_author_'.md5('http://127.0.0.1/wp')];
//所以这样子就可以把 WP 中的评论者名字单独取出来了

> 若是WP安装在 /wp 目录里,那么保存 Cookie 的时候设置的 Path 就是 /wp。
> 也就是说,如果你把上面代码放在 /wp 目录上一层是无效的,比如这里 / 或者 /cookie。

> 牛叉的星际传送门 - http://www.evlos.org/apps/demo/cookie/wp.php

Leave a comment
107 Comments.
  1. 619 Mozilla Firefox Windows 坐沙发!#1

    竟然没看懂 :evil:
    再看第二遍 ...

    @
  2. mice GreenBrowser Windows 坐板凳!#2

    竟然有板凳...拿下......

    @
  3. mice GreenBrowser Windows 躺地板!#3

    再来水一个留言 再拿下...

    @
  4. 阿吴 Google Chrome Windows 天花板!#4

    哈哈,我只看懂一个,我的刷新按键在左上角!

    @
  5. GEZ鸽子 Google Chrome Windows 下水道!#5

    我看到不少博客已经有这个功能了!

    @
  6. kaka Mozilla Firefox Windows 地心!#6

    抛砖引玉啦。。

    @
  7. 这个我喜欢,可是已经没用WP了...

    @
  8. 呵呵,有点意思,我只管用,没有这么深入研究过

    @
    • @万戈 , 呵呵,小邪得搞通透来,不然会像上次输出邮件列表一样 ~
      少学了一个函数就比别人程序多出几十行 ~
      太杯具了 ╮(╯_╰)╭

      @
  9. PHP没用过....

    @
  10. :mad: 看到了春哥,拜模下 :redface:

    @
  11. 你还想让春哥陪你过夜,也不怕做恶梦啊!

    @
  12. 我认为客户端js保存cookie,服务器端程序读取是较好的cookie利用方式。。。。
    还有我测试在wp模板里不管利用php原生的setcookie()或者wp的设置函数wp_setcookie()都会报错,不知什么原因。。。。难道要用 wp_set_auth_cookie()才行?

    @
    • @QiQiBoY , 刚刚小邪在模板里测试了一下 ~

      setcookie('cookie_test','good',time()+600);
      

      没有问题的额 ~ :biggrin:

      @
      • @邪 罗刹,
        是加在wp的模板文件里啊,比如header或index、single里,我的一加就报错。单独建立个php文件测试则正常。

        @
    • @QiQiBoY , 杯具了 ~

      
      
      < ?php
      setcookie('cookie_test','good',time()+600);
      if (isset($_COOKIE['cookie_test'])) {
      echo $_COOKIE['cookie_test'];
      }
      ?>
      

      小邪刚刚又测试了一遍,加到 header.php 里面 ~
      很正常额,你的模板貌似有点点奇怪喔 ~

      @
  13. 过来学Setcookie()方法~~~

    @
  14. 现在cookie很不安全吧。好像很多都有加密的了,但基本原理还是你这样的了。

    我学的不好,所以不用春哥了,哈哈 :mad:

    @
  15. 哈哈 有时候这些小的东西可以带来很大的方便,但是同时 也会带来蛮大的安全隐患~~如果你的网站有XSS漏洞的话,我可以很轻而易举的得到你在大家电脑上写下的Cookie喔~~特别像邮箱这种东西~~一个两个不值钱,积攒多了,卖给“垃圾制造者”的话~~也不便宜吧 嗯嗯~~ :evil:

    @
  16. 小邪的小饼干呀~~哈哈! :surprised:

    @
  17. 冲着春哥来的,哈哈。貌似小邪起得很早嘛...是不是下次要讲session了。

    @
  18. 小邪真是好童鞋! :biggrin:
    ps:春哥就免了,偶喜欢异性……

    @
  19. 讲得很通俗易懂。好老师啊。

    @
  20. 不错不错。受教了。

    @
  21. 那个cookies不是存在本地么?

    @
  22. 呵呵,自己弄的一个。不过貌似比你的复杂点。。。
    http://imn.im/tools/cookies/

    @
  23. 为啥不找个现成的代码呢?网上很多呀

    @
  24. 你用cookies想储存什么?一般都不用cookies,除非迫不得已丫的要照顾用户体验。。 :confused:

    @
    • @Jerry Chen , 呵呵,玩玩而已,防止啥时候用到却没有头绪 ~
      而且上次有个童鞋WP模板评论者信息那里没有读取Cookies出来 ~
      结果问我,当时没搞定呢 ~
      现在没问题了~

      @
  25. 在你面前我真的很无知

    @
  26. 这高深了 看了白看 反正编程跟我无关

    @
  27. 显示证明我在这里留过言!

    @
  28. 不太懂cookies

    @
  29. 都是技术文章啊,挺佩服你的

    @
  30. 话说小邪童鞋学编程的? :cool:

    @
  31. 还是写点文章吧 我喜欢看别人写的情感性、文学性的文章

    @
    • @苏扬 , ................ ~ 无语 ~
      实在是写不来文学情感类文章,小邪的学校语文成绩是垫底的 ~
      真的写不出这些东西 ~
      杯具 ~ :cry:

      @
  32. 通常是通过JavaScript处理cookies的吧?

    @
    • @bolo , = =,小邪对JavaScript十窍通了九窍 ~
      现在让小邪用JS来处理Cookies,还是把鼠标吞下去来得容易些 ~
      O(∩_∩)O 哈哈 ~
      以后再学罗 ~ :smile:

      @
  33. 拜读了,不错。

    @
  34. 以后没天来你这学习 :cool:

    @
  35. 没时间 周末再来仔细看看 呵呵

    @
  36. 说真的,我还真没看懂代码 :exclaim:

    @
    • @YYWR , 呵呵,没事儿,有兴趣的话多研究研究就懂了 ~
      没兴趣的话当做鸟文看着,也不错 ~ 哈哈 ~ :biggrin:

      @
  37. 恩, 讲得挺好.. 我看明白了. :biggrin:

    @
  38. 看样子,小邪已经开始慢慢走火入魔了,代码的事,永远敲不完哦。。。

    @
  39. @柳城,
    喔耶,真高兴对你有用呢 ~

    @
  40. 呵呵,不错,过来学习了.

    @
  41. 好复杂,头晕,我是个技术盲

    @
  42. 作用域一直弄不清

    @
    • @九站 , 唔,一般是继承性的 ~ 也就是比如 /1/1/2 和 /1/1 ~
      作用域设置为 /1 ,则下面都可以读取此小甜饼 ~

      @
  43. cookie :mad: 记住密码那个东西.貌似以前可以欺骗挑战. :arrow:

    @
    • @Shang , 呵呵,现在每个网站都有这个功能来着 ~
      一般密码保存都会做好多层加密,例如连续俩次md5 ~
      强力点的就结合 Session ~
      而且要欺骗可是需要漏洞来着 ~
      小邪还是挺小心的说 ~

      @

Leave a Reply


[ Ctrl + Enter ]