Home
Posts
Tag
About
30天免登录实现(session运行机制)
30天免登录实现(session运行机制)
2018-04-08 15:45:52
#php
#session
1. 对所有路径url进行检查,登录后才可以使用的方法均通过```login_check()```启动session,默认给访问当前应用的cookie设置为会话过期(```cookie_lifetime=0```)。因```login/index```页面不进行```login_check()```所以需要手动启动session。 ``` session('', '', ['cookie_lifetime' => 0, 'cookie_path' => '/', 'cookie_domain' => 'blog.liumn.com', 'cookie_httponly' => TRUE]); ``` 2. 勾选过30天免登录需要手动刷新cookie的有效时间,expire从当前会话有效变更为30天,设置http头SetCookie。 ``` setcookie(ini_get('session.name'), session_id(), time() + 259200, '/', 'blog.liumn.com', FALSE, TRUE); ``` 可以通过在```session_start([ array $options = [] ])```的时候附加参数的方式,通过cookie实现session自动过期 #### 关于session的有效期 php.ini中的配置[opitions列表](http://php.net/manual/zh/session.configuration.php)。有效期的几个决定因素: + [cookie_lifetime](http://php.net/manual/zh/session.configuration.php#ini.session.cookie-lifetime) 以秒数指定了发送到浏览器的 cookie 的生命周期。值为 0 表示“直到关闭浏览器”。默认为 0。 + [gc_maxlifetime](http://php.net/manual/zh/session.configuration.php#ini.session.gc-maxlifetime)指定过了多少秒之后数据就会被视为“垃圾”并被gc清除。 + [gc_probability](http://php.net/manual/zh/session.configuration.php#ini.session.gc-probability)与 [session.gc_divisor](http://php.net/manual/zh/session.configuration.php#ini.session.gc-divisor) 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/1000 意味着在每个请求中有 0.1% 的概率启动 gc 进程。gc_probability默认为 1, gc_divisor 默认为1000。 更新即重新计算生命周期,即使会话超过gc_maxlifetime时间没有更新过,如果没有命中"0.1%"的启动gc概率,即gc没有启动,那这个会话就还是有效的。 #### 关于session的管理 + 文件的方式来(默认)管理,会话文件默认存放在/tmp目录下,可通过[session.save_path](http://php.net/manual/zh/session.configuration.php#ini.session.save-path)进行配置。 + redis,最简单设置: 1. 安装redis 2. 安装phpredis扩展 redis.so 3. 改配置文件php.ini```session.save_handler = Redis ;session.save_path = "tcp://127.0.0.1:6379?persistent=1&timeout=3&database=11&auth=xxxxxx"``` 4. restart + 继承[SessionHandler class](http://php.net/manual/zh/class.sessionhandler.php) 自己实现,redis|mysql|memcache等等