在PHP中使用cookie验证

上一篇 / 下一篇  2007-05-24 11:29:05 / 个人分类:PHP

    在许多投票程序中,需要验证投票者是否多次投票,因此就要做一个验证。做验证可以使用cookie,或者session。在这里主要讲怎么用cookie来做验证的问题:

    用cookie来做验证,首先就要用到两个函数:

    一个是setcookie()setrawcookie()

    setcookie()的函数大致如下:

    boolsetcookie( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] ) 

    name参数是Cookie 的名字。 value是Cookie 的值。此值保存在客户端,不要用来保存敏感数据。 expire是Cookie 过期的时间。这是个 Unix 时间戳,即从 Unix 纪元开始的秒数。换而言之,通常用time()函数再加上秒数来设定 cookie 的失效期。或者用mktime()来实现。path是Cookie 在服务器端的有效路径。domain是该 cookie 有效的域名。secure是指指明 cookie 是否仅通过安全的 HTTPS 连接传送。当设成TRUE时,cookie 仅在安全的连接中被设置。默认值为FALSE

   setcookie()定义一个和其余的 HTTP 标头一起发送的 cookie。和其它标头一样,cookie 必须在脚本的任何其它输出之前发送(这是协议限制)。这需要将本函数的调用放到任何输出之前,包括<html><head>标签以及任何空格。如果在调用setcookie()之前有任何输出,本函数将失败并返回FALSE。如果setcookie()函数成功运行,将返回TRUE。这并不说明用户是否接受了 cookie。

   当 cookie 被设置后,便可以在其它页面通过$_COOKIE$HTTP_COOKIE_VARS数组取得其值。需要注意的是,autoglobals$_COOKIE形式适用于 PHP4.1.0或更高版本。而$HTTP_COOKIE_VARS则从 PHP 3 起就可以使用。Cookie 的值也会被保存到$_REQUEST数组中。

   在投票程序中,大致的判断过程是:

  isset($pollee)    //cookie是否存在,$pollee(cookie的名字)是否存在

   如果没有cookies,则投票,然后写入cookies

   用setcookie(),程序如:

  setcookie("pollee","voted2",time()+1);//括号里面第一个是cookie名,第二个是cookie的value,第三个是时间限制。  

   如果有,则弹出一个对话框,提示已经投票,然后返回投票页或者首页。

   大致就是上面

   但是cookie的缺点就是:  

  • Cookies 不会在设置它的本页生效,要测试一个 cookie 是否被成功的设定,可以在其到期之前通过另外一个页面来访问其值。过期时间是通过参数expire来设置的。可以简单地使用print_r($_COOKIE);来调试现有的 cookies。

  • Cookie 必须用和设定时的同样的参数才能删除。如果其值一个空字符串,或者是FALSE,并且其它的参数都和前一次调用 setcookie 时相同,那么所指定名称的 cookie 将会在远程客户端被删除。

  • 由于把 cookie 的值设为FALSE会使客户端尝试删除这个 cookie,所以要在 cookie 上保存TRUEFALSE时不应该直接使用 boolean 值,而应该用0来表示FALSE,用1来表示TRUE

  • 可以把 cookie 的名称设置成一个数组,但是数组 cookie 中的每个元素的值将会被单独保存在用户的系统中。考虑使用explode()函数用多个名称和值设定一个 cookie。不推荐将serialize()用于此目的,因为它可能会导致一个安全漏洞。

  •   

      


     


    TAG: cookie 投票 缺点 setcookie 远程客户 有点专业

     

    评分:0

    我来说两句

    显示全部

    :loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

    关于作者