美文网首页
PHP-会话控制

PHP-会话控制

作者: AGEGG | 来源:发表于2019-03-15 10:48 被阅读0次

    会话控制

    为什么要用?
    HTTP协议无状态协议,同一用户请求相同页面多次会被当成不同用户的独立请求。会话控制,允许服务器跟踪同一客户端做出的连续请求,这样可以保持登录状态等

    GET参数传递
    能用不推荐,缺点:url能获取到不安全,容易丢失

    Cookie

    //设置cookie
    setcookie($name,$value,$expire,$path,$domain,$secure);
    //设置数组形式cookie
    setcookie('a['b]','val);
    //读取cookie
    $_COOKIE
    //删除cookie,设置为过期
    setcookie($name,'',time()-1000);
    

    cookie
    优点:存储在客户端不占用服务器资源
    缺点:因为存储在客户端,不建议将敏感,重要信息保存。而且用户可以禁止cookie使用

    Session

    Session并不是完全脱离cookie的,是基于cookie的,可以通过cookie来获取sessionid

    //session的使用
    
    //开启session
    session_start();
    //使用session
    $_SESSION;
    //清空session
    #_SESSION = [];
    //删除session
    session_destory();
    
    //session的设置
    session.auto_start //是否自动开启session_start
    session.cookie_domain //存储sessionId的cookie的有效域名
    session.cookie_lifetime
    sesson_cookie_path
    session_name//默认名字为PHPSESSID,可以更改
    session.save_path//session在服务器存储在哪儿路径下
    session.use_cookies//是否使用cookie来传递sessionid
    session.use_trans_sid//是否使用页面传递的方式传递sessionid
    
    //session垃圾回收机制
    session.gc_probability
    session.gc_divisor
    session.gc_maxlifetime//session最大生命周期
    
    ex.
    //文件超过1440s过期,每访问100次有1次的几率删除过期
    session.gc_maxlifetime = 1440
    session.gc_divisor = 100
    session.gc_probability = 1
    

    session.save_handler//session存储的句柄,可以存储到redis和mongodb和mysql等

    session优点:安全
    缺点:占服务器,
    分布式session只存在一台,仅一台可用,但可以使用redis共享

    传递SessionID的问题
    禁用cookie情况下用session_name()和session_id()

    <a href="1.php?PHPSESSID=sessid的值">下个页面</a>
    sess_sessionid的值
    <a href="1.php?<?php echo session_name() .'='.session_id()?>">下个页面</a>
    
    //SID开启cookie为空,未开启cookie就是session_name() .'='.session_id()的拼接,
    <a href="1.php?<?php echo SID;?>">下个页面</a>
    

    session存储

    //mysql,memcache,redis
    session_set_save_handler()
    
    

    相关文章

      网友评论

          本文标题:PHP-会话控制

          本文链接:https://www.haomeiwen.com/subject/gqnkmqtx.html