日期:2014-05-17  浏览次数:20386 次

PHP中使用cookie和session

cookie和session不管在java还是php中用的是比较多的,cookie可以看做是客户端技术,session则是服务端技术。像购物车还有网站自动登录都可以用cookie实现,session则比较偏向验证这一块,相比cookie安全性更高,因为session是存储在服务端的,不能随意删除或修改。下面来简单的分享下我的学习心得

1.cookie的使用

如果需要保存cookie可以直接在php页面直接使用setCookie函数来保存cookie使用方法如下

<?php
  setCookie("username","123456",time()+120);
?>

第一个参数是cookie的键,第二个则是value,第三个表示该cookie什么时候过期单位是秒,time()表示当前时间。这句代码的意思是该cookie在2分钟会过期

更新cookie的方法也是一样。如果是火狐浏览器我们可以看到cookie如下


下面来删除cookie

setCookie($cookiename, '');或者 setCookie($cookiename, NULL);这两种方法都能删除cookie

至于要取得cookie就更简单了,使用$_COOKIE就能取得,批量操作cookie也可以通过这个预定义超全局数组

2.session的使用

(1)启用session

(2)把对象放入session中

 session_start();
  $_SESSION["password"]="123456";

两句话就可以把sessiona保存起来了,就像下面这样

要取出session也是使用$_SESSION取得,删除单个session可以使用unset($_SESSION["password"]),如果是删除全部可以使用session_destroy();


session的真正原理不是那么好理解,要理解的深入也很难,需要深入的话可以使用firebug查看http的请求和响应。当服务器创建好session之后,会给客户端浏览器返回一个

PHPSESID,这个ID就是会话唯一ID.当下次浏览器客户端要取session就会通过这个唯一ID去服务器端取出session信息。如果客户端把cookie禁用了,按照正常的代码,session就不能共享了。这里提供最简单的两种做法

第一种就是URL重写,先判断是否有PHPSESSID如果有则设置session_id(SID的值);

第二种就是修改php.ini里的session.use_trans_sid把值设为1


对于第一种PHP提供了一个常量叫SID可以直接拿来使用,因为这种情况比较极端平时基本上不会遇到。具体的代码就不写了。有需要可以给我写评论,我直接给发过去。

要注意的是php的session也可以存对象,要注意的就是使用前最好把这个对象用require_once引入就好使了


最后针对session的应用,我在网上找了一个特别简单的验证码,代码如下

<?php
    session_start();
    
    Header("Content-type: image/PNG");
    $im = imagecreate(44,18); 
    $back = ImageColorAllocate($im, 245,245,245); 
    imagefill($im,0,0,$back); 
    $vcodes = "";
    srand((double)microtime()*1000000);
    
    for($i=0;$i<4;$i++){
    $font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255)); 
    $authnum=rand(1,9);
    $vcodes.=$authnum;
    imagestring($im, 5, 2+$i*10, 1, $authnum, $font);
    }
    $_SESSION['VCODE'] = $vcodes;

    for($i=0;$i<100;$i++) 
    {
    $randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
    imagesetpixel($im, rand()%70 , rand()%30 , $randcolor); 
    }
    ImagePNG($im);
    ImageDestroy($im);
?>

具体怎么用就不用解释了吧得意