• 设置一个严格的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

  • 相关阅读:
    ARM Linux 3.x的设备树(Device Tree)
    ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决
    Device Tree Usage( DTS文件语法)
    Ubuntu 14.04中gedit打开文件出现中文乱码问题
    Jenkins中集成jmeter-maven插件
    Linux(centos6.5)下安装jenkins
    IM系统架构设计之浅见
    一些常用软件的网络端口协议分类介绍
    Jenkins执行批处理文件失败
    八大持续集成工具
  • 原文地址:https://www.cnblogs.com/logon/p/3267746.html
Copyright © 2020-2023  润新知