简述cookie和session的区别及各自的工作机制,储存位置等,简述cookie的优缺点。
打一个比方,用户去超市买东西,然后办理了一张会员卡,那么超市就可以理解为服务器,用户可以理解为客户端,而会员卡就可以理解为cookie,会员卡里面存储着用户信息。
写 setcookie($name,$value,$expire,$path,$domain,$secure)
读 $_COOKIE
存数组 setcookie(‘a[b]’,’val’)
删除 setcookie($name,”,time-1000)
优点:不会占用服务器资源,效率高
缺点:不建议将敏感信息存储在cookie,用户可以禁用cookie,则无法保存用户信息
还是去超市,超市给用户办了一张电子卡,每次只需要说明用户的会员卡号码,或者是手机身份证什么的,那么这个身份证就相当于SessionID
因为有可能客户端会禁用cookie,所以可以通过在url上拼接,如
<a href="1.php?<?php echo session_name().'='.session_id();?>"></a>
或者更简单的方法
<a href="1.php?<?php echo SID;?>"></a>
而且SID只有在cookie被禁用的情况下才会调用到。
所以说,session的读取也是需要cookie上面的SessionID
要使用session首先要session_start。然后直接操作$_SESSION就可以了
销毁session $_SESSION = [];或者session_destory();
session.auto_start 是否自动开启session_start
session.cookie_domian 存储cookie的有效域
session.cookie_lifetime
session.cookie_path
session.name(默认是PHPSESSID)
session.save_path(默认存储路径)
session.use_cookies(是否使用cookie来传递sessionid)
session.use_trans_sid
session.gc_probability (垃圾回收机制) =1 有一次清理的机会
session.gc_divisor = 100 每访问一百次
session.gc_maxlifetime(最大生命周期) =1440 如果超过25分钟
seaaion.save_handler 可以储存到redis,mysql等 在这里配置
优点安全,都是存储在服务器里面
缺点 占用服务器磁盘
假设多台服务器,session的存储就会是一个问题,如在一台服务器登陆后产生的session,如果被负载均衡轮询到另外一台服务器,那么这个登陆就无效了,所以需要把session 存储到另外的地方,如mysql,memcache,reids等
可以使用session_set_save_handler()