• 简单的行为控制管理方法,自动登录,session定时验证码过期


    代码很简单 实现的方式很多,用cookies 用static 变量 file文件缓存 等等 

    比如

    
    
    //简单行为管理,如果请求此方法次数多于5次,就显示验证码 吧当前方法的name传进来,有效时间是5分钟,$return=1是增加,$return=2就是只是返回$_COOKIE[$name]的值
    function behavior_function($function = __FUNCTION__, $class = __CLASS__, $return=1) {
    
        $name = 'behavior_' . $class . '_' . $function;
        if($return ==1) {
            setcookie($name, $_COOKIE[$name] + 1, time() + 3000, "/");
        }elseif($return ==2){
            return $_COOKIE[$name] > 5 ? true : false;
        }
    }
    
    
    

    调用
    
    
    public function index() {
            if (IS_POST) {
                //尝试登陆次数增加
                behavior_function(__FUNCTION__, __CLASS__,1);
               
            } else {
                $res =  behavior_function(__FUNCTION__, __CLASS__,2);
                $codes = $res === true ? 1 : NULL;
                $this->assign("codes", $codes);
                $this->display();
            }
        }
    
    
    

    //为了微信页面好看,将中文字符小于4的补充空格

    function cn_string_to_4($str) {
    if(mb_strlen($str,'utf8') <4){
    return $str = $str.str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', (4-mb_strlen($str,'utf8')));
    }
    return $str;
    }

    通过cookies,做一个简单的。使用session做过期验证码的功能

    这有2个版本

    /*
     * 设置一个定时有效的session值, tp的session函数貌似没有这个功能
     * 
     * $time 格式是实践戳
     * 
     * $type      1  储存 和 更新session存活时间
     *       2  查看获取
     *       3  销毁  
     */
    
    function session_limit_time_save($type=1,$name='', $value = '', $expire = '') {
    
        $session_time_name = $name . "_time";
        $session_expire = $name . 'expire';
        switch ($type) {
            case 1:
                $_SESSION["$name"] = $value;
                $_SESSION["$session_time_name"] = time();
                $_SESSION["$session_expire"] = $expire;
                break;
            case 2:
                if (time() - $_SESSION["$session_time_name"] > $_SESSION["$session_expire"]) {
                    //访问过期session,就销毁
                    unset($_SESSION["$name"]);
                    unset($_SESSION["$session_time_name"]);
                    unset($_SESSION["$session_expire"]);
                    return NULL;
                } else {
                    return $_SESSION["$name"];
                }
                break;
            case 3:
                unset($_SESSION["$name"]);
                unset($_SESSION["$session_time_name"]);
                unset($_SESSION["$session_expire"]);
                break;
            default:
                echo '数据处理模式错误!';
                break;
        }
    }

    这个不太好,因为在$_SESSION上可以看到其他的值,其实一般都是借助cookies来实现过期判断

    比如 

    $time = 30 * 30;//半小时过期
    setcookie(session_name(), session_id(), time() + $time);

    我还尝试过使用,直接访问session的temp文件,去实现过期,但是发现,session存的数据格式是

    ss|s:4:"1111";ees|s:4:"1111";e1es|s:2:"55";ee2s|s:2:"22";ee3s|s:6:"155111";

    没有存放过期时间,是通过设置的全局过期时间,做创建时间过期,删除和更新的

    伪代码:

    $session_path = "sess_".session_id();
    
    $sessionpath = session_save_path(); 
    
    $file_name_path = $sessionpath.'/'.$session_path;
    
    
    //$a=filemtime($file_name_path);
    $a=filectime($file_name_path);
    //$a=fileatime($file_name_path);
    $r = date("Y-m-d H:i:s",$a);
    var_dump($r);
    
    $rr = get_cfg_var('session.gc_maxlifetime');
    var_dump($rr);

    发现效果不是很好,最后决定借用cookies来做定时过期

    自动登录

    原理很简单就是在你需要控制的需要登录控制的父控制器做一个__construct方法,在登录的去set一个cookies ,可解密的加密算法,

    public function __construct() {

       //解密

    }

     当然在登录的时候记得让cookies 过期,不然会出现,退出依然可以登录问题

    访问需要权限的时候,去获取cookies,解密获取账号和密码,在去模拟登录,创建session,和登录差不多,cookies没有就什么都不做就,让权限系统去出路页面访问权限

  • 相关阅读:
    ovs 数据包的处理过程
    Docker常用命令
    java中的各种锁详细介绍
    Oracle中的一些基本操作
    Java连接MySQL8.0以上版本数据库方式
    关于Maven+Tomcat7下cannot be cast to javax.servlet.Servlet问题的解决办法
    冒泡排序及优化详解
    Java集合类的概述
    关于java中构造方法、实例初始化、静态初始化执行顺序
    git push 时 failed to push some refs 的解决方案
  • 原文地址:https://www.cnblogs.com/zx-admin/p/5859918.html
Copyright © 2020-2023  润新知