PHP Session session_set_save_handler()的OOP面向对象原型不能支持validate_sid()和update_timestamp()两个方法,如果需要像session_set_save_handler()的非面向对象原型一样支持验证session id和更新指定session的时间戳,需要同时implements SessionHandlerInterface和SessionUpdateTimestampHandlerInterface两个接口,其中SessionHandlerInterface是PHP 5.4引进的,SessionUpdateTimestampHandlerInterface是PHP 7.0引进的,并且SessionUpdateTimestampHandlerInterface目前在PHP手册文档中找不到任何说明。
SessionUpdateTimestampHandlerInterface有两个抽象方法,分别是SessionUpdateTimestampHandlerInterface::validateId()和SessionUpdateTimestampHandlerInterface::updateTimestamp(),其中SessionUpdateTimestampHandlerInterface::validateId()参数为session id, 用来检测传入的session id是否有效,返回值为布尔值,如果为true表示session id有效,如果为false,表示无效,此时PHP会自动重新生成一个新的session id,SessionUpdateTimestampHandlerInterface::updateTimestamp()第一个参数为session id,第二个参数为session data,用来更新指定session数据的时间戳,当启用了PHP 7.0开始支持的session.lazy_write以后, 如果在脚本运行周期结束后SESSION数据没有发生变化,PHP不会重新写入SESSOIN数据,在这种情况下,SessionUpdateTimestampHandlerInterface::updateTimestamp()可以用来更改指定session的数据,并不限于字面意义上的时间戳。
以下代码为一个类结构文件,每个方法具体代码已省略。
- <?php
- /*
- @author Wu Xiancheng from wuxiancheng.cn
- Code structure for PHP 7.0+ only because SessionUpdateTimestampHandlerInterface is introduced in PHP 7.0
- With this class you can validate php session id and update the timestamp of php session data
- with the OOP prototype of session_set_save_handler() in PHP 7.0+
- */
- class PHPSessionXHandler implements SessionHandlerInterface, SessionUpdateTimestampHandlerInterface {
- public function close(){
- // return value should be true for success or false for failure
- // ...
- }
- public function destroy($sessionId){
- // return value should be true for success or false for failure
- // ...
- }
- public function gc($maximumLifetime){
- // return value should be true for success or false for failure
- // ...
- }
- public function open($sessionSavePath, $sessionName){
- // return value should be true for success or false for failure
- // ...
- }
- public function read($sessionId){
- // return value should be the session data or an empty string
- // ...
- }
- public function write($sessionId, $sessionData){
- // return value should be true for success or false for failure
- // ...
- }
- public function create_sid(){
- // available since PHP 5.5.1
- // invoked internally when a new session id is needed
- // no parameter is needed and return value should be the new session id created
- // ...
- }
- public function validateId($sessionId){
- // implements SessionUpdateTimestampHandlerInterface::validateId()
- // available since PHP 7.0
- // return value should be true if the session id is valid otherwise false
- // if false is returned a new session id will be generated by php internally
- // ...
- }
- public function updateTimestamp($sessionId, $sessionData){
- // implements SessionUpdateTimestampHandlerInterface::validateId()
- // available since PHP 7.0
- // return value should be true for success or false for failure
- // ...
- }
- }
- ?>
复制代码 |