zoukankan      html  css  js  c++  java
  • 设置一个严格的SESSION过期时间

    认识一:当我们需要更改session生存时间的时候通行的做法是更改php.ini文件中

       1:  ; Name of the session (used as cookie name).
       2:  session.name = PHPSESSID
       3:   
       4:  ; Initialize session on request startup.
       5:  session.auto_start = 0
       6:   
       7:  ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
       8:  session.cookie_lifetime = 0 //(单位为秒)
       9:   
      10:  ; The path for which the cookie is valid.
      11:  session.cookie_path = /
      12:   
      13:  ; The domain for which the cookie is valid.
      14:  session.cookie_domain =

    session.cookie_lifetime这项的数值,数值为0即关闭浏览器即cookie信息失效,如果是用户登录信息,那么关闭页面在打开就需要重新登录。

    当将此设置为一定的值后,在指定的秒数内重新打开该页面,仍旧保留以前的 cookie 数据并且自动登陆。

    再指定有效生存时间的情况下另一种不常见的做法是:我们在浏览器中挂载一段js脚本使用setInterval轮询的访问网站页面来延长session存活时间,不过这是在没有权限操纵服务器的情况下会采用的做法。

    额外的说明:

    PHP中设置的session时间测试过还是相当准确的,产生的session文件如果已经过期而没有被gc回收(也就是session的概率销毁清除)文件本身还保留在服务器上然后已经过期,服务器是不会去使用这个过期session文件中的session信息的。对于使用session控制的某些保持登录状态时间类信息可以放心大胆的使用。

    项目中的做法:

    session作为保持回话信息的重要工具怎么说都会开启,在整个程序的入口文件中我们程序启动即调用 session_set_cookie_params();

    session_set_cookie_params()的用法说明

    Set cookie parameters defined in the php.ini file. The effect of this function only lasts for the duration of the script. Thus, you need to call session_set_cookie_params() for every request and before session_start() is called.

    或者入口文件中实例化出来一个session_base()对象

    class session_base()
    {
        var $max_life_time  = 1440; // SESSION 过期时间||设为0即关闭浏览器即销毁session
        var $my_session_name = 'logonmy'
        var $session_cookie_path   = '/';//SESSION存储路径
        var $session_cookie_domain = '';//这里为空的话即为当前站点域名,也可以指定作用域名[.demo.com]
        var $session_cookie_secure = false;//一般都为false
     
     
        public function __construct()
        {
            $this->_session_base();
        }    
     
        private function _session_base()
        {
            //session_name($this->$my_session_name);//如果我们不想使用PHPSESSID作为session名称我们可以改成于本站相关或者喜欢的名称 
            session_set_cookie_params($this->$max_life_time,$this->$session_cookie_path,$this->$session_cookie_domain,$this->$session_cookie_secure);
            session_start();
        }
    }

    其实说白了不管session_get_cookie_params();或者session_set_cookie_params();都是对配置文件中session相关属性读和写。

    认识二:关于session的垃圾回收机制

    还是来自php.ini中的定义

       1:  ; Define the probability that the 'garbage collection' process is started
       2:  ; on every session initialization.
       3:  ; The probability is calculated by using gc_probability/gc_divisor,
       4:  ; e.g. 1/100 means there is a 1% chance that the GC process starts
       5:  ; on each request.
       6:   
       7:  session.gc_probability = 1
       8:  session.gc_divisor = 100
       9:   
      10:  ; After this number of seconds, stored data will be seen as 'garbage' and
      11:  ; cleaned up by the garbage collection process.
      12:  session.gc_maxlifetime = 1440

    这个设置:session在产 生后的1440秒后失效,会被认为garbage(垃圾) ,session.gc_probability和session.gc_divisor作为分子和分母,session.gc_probability/session.gc_divisor 得到启动垃圾回收gc进程(删除已经超出gc_maxlifetime的session文件)的发生概率,值得一提的是 为什么不把session.gc_probability和session.gc_divisor分别设置为100和100即为100%的发生概率,这是因为php召唤gc进程需要耗费计算资源,产生不必要的开销。所以一般都会保留默认值。对于大型或者大访问量的网站,还会降低这一概率。

    留意:php.ini中 session.cookie_lifetime 和 session.gc_maxlifetime 其中session.cookie_lifetime是以秒数指定了发送到浏览器的 cookie 的生命周期。session.gc_maxlifetime指定了服务器session文件生存周期。最好将两个设置成相同值。

    参考:

    1:关于 Session Time Out 的时间控制总结

    2:session的垃圾回收机制

    3:http://www.111cn.net/phper/php/45077.htm

    4:http://home.sgnet.cc/blog/?p=91

  • 相关阅读:
    关于求 p_i != i and p_i != i+1 的方案数的思考过程
    poj 3041 Asteroids 二分图最小覆盖点
    poj 1325 Machine Schedule 最小顶点覆盖
    poj 1011 Sticks 减枝搜索
    poj 1469 COURSES 最大匹配
    zoj 1516 Uncle Tom's Inherited Land 最大独立边集合(最大匹配)
    Path Cover (路径覆盖)
    hdu 3530 SubSequence TwoPoint单调队列维护最值
    zoj 1654 Place the Rebots 最大独立集转换成二分图最大独立边(最大匹配)
    poj 1466 Girls and Boys 二分图最大独立子集
  • 原文地址:https://www.cnblogs.com/logon/p/3267746.html
Copyright © 2011-2022 走看看