php的会话控制技术 session与cookie

简述cookie和session的区别及各自的工作机制,储存位置等,简述cookie的优缺点。

打一个比方,用户去超市买东西,然后办理了一张会员卡,那么超市就可以理解为服务器,用户可以理解为客户端,而会员卡就可以理解为cookie,会员卡里面存储着用户信息。

cookie的操作

setcookie($name,$value,$expire,$path,$domain,$secure)
$_COOKIE
存数组 setcookie(‘a[b]’,’val’)
删除 setcookie($name,”,time-1000)

cookie的优缺点

优点:不会占用服务器资源,效率高
缺点:不建议将敏感信息存储在cookie,用户可以禁用cookie,则无法保存用户信息

session与cookie的联系 SessionID

还是去超市,超市给用户办了一张电子卡,每次只需要说明用户的会员卡号码,或者是手机身份证什么的,那么这个身份证就相当于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首先要session_start。然后直接操作$_SESSION就可以了
销毁session $_SESSION = [];或者session_destory();

session的配置 (php.ini)

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的存储就会是一个问题,如在一台服务器登陆后产生的session,如果被负载均衡轮询到另外一台服务器,那么这个登陆就无效了,所以需要把session 存储到另外的地方,如mysql,memcache,reids等
可以使用session_set_save_handler()

All posts

Other pages

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注