代码很简单 实现的方式很多,用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没有就什么都不做就,让权限系统去出路页面访问权限

简单的行为控制管理方法,自动登录,session定时验证码过期的更多相关文章

  1. SpringBoot学习:整合shiro(rememberMe记住我后自动登录session失效解决办法)

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 定义一个拦截器,判断用户是通过记住我登录时,查询数据库后台自动登录,同时把用户放入ses ...

  2. spring boot:spring security给用户登录增加自动登录及图形验证码功能(spring boot 2.3.1)

    一,图形验证码的用途? 1,什么是图形验证码? 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers ...

  3. pyppeteer 登录一般网站 并利用 http方法获取登录页面的验证码

    主函数 新建浏览器,进行登录,由于验证码的识别准确率不是百分之百,需要多次尝试. async def main(self, username, pwd, url): # 定义main协程函数, log ...

  4. c#控制WPF程序自动登录(Automation方式实现)

    说明:winForm窗体,可以通过win32接口dll的findWindow之类的函数来实现查找winform窗口,mfc窗口等. 但是wpf却是不实用这些,可以靠automation方式来进行操作. ...

  5. MVC 自定义特性(验证用户登录session是否已经过期)

    新建一个类 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] publ ...

  6. 运行control userpasswords2实现winXP自动登录

    原文:运行control userpasswords2实现winXP自动登录 如果你的计算机只是自己一人在用,且每次都用同一个用户名(或者你根本没在意过什么是用户名),而每次都要输入密码,是否太麻烦了 ...

  7. QQ模拟自动登录实现

    QQ模拟自动登录实现 本篇文章主要介绍"QQ模拟自动登录实现(带验证码)",主要涉及到java 实现QQ自动登录(带验证码)方面的内容,对于java 实现QQ自动登录(带验证码)感 ...

  8. 设置Windows Server 2022、Win10、Win11自动登录的简单方法-OK

    这里介绍自己从使用 Windows Server 2003 到 Windows Server 2022 一直都在使用的自动登录系统的方法,屡试不爽.网上讨论的方法太繁琐,所以共享出来,供大家参考.该方 ...

  9. C#三种模拟自动登录和提交POST信息的实现方法

    网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法.       网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以 ...

随机推荐

  1. C和指针 第十章 结构和联合 (一)

    结构体: 聚合数据类型是指,能够同时存储超过一个的单独数据,C语言中有两个聚合数据类型,数组和结构体.数组中储存的类型必须相同,元素通过下标和指针引用来访问的. 结构体也是一些值的集合,但是结构体中每 ...

  2. javaweb 中的路径问题汇总

    路径问题汇总  http://localhost/day10/AServlet     request.getRequestDispatcher("/AServlet") ==&g ...

  3. Python3实现简单的爬虫功能

    python3简单实现一个爬去网站图片的小功能: 有时候想要下载自己喜欢的多个图片时,不需要一个个点击来下载,使用python脚本批量拉取,并保存到本地. 1. 首先找到自己要下载图片的url 2. ...

  4. 数据库DBA(3年以内需求)

    1.DBA工作:日常维护,备份及恢复,系统安装,补丁应用,健康检查及优化,故障处理; 2.精通sql语句.视图存储过程.函数的编写.触发器; 3.精通data guard/RAC,能顺利配置和管理da ...

  5. ORACLE简单触发器

    因工作需要,尝试写一些建议的触发器,下面为其中一例. //创建一个名为TRG_FIN_OPB_ACCOUNTCARD的触发器 create or replace trigger TRG_FIN_OPB ...

  6. appCan uexLocation 定位功能

    js的引用: <script src="../js/zy_control.js"></script> <script src="../js/ ...

  7. TFS二次开发系列:一、TFS体系结构和概念

    TFS是Team Fundation Server的简称,是微软VSTS的一部分,它是Microsoft应用程序生命周期管理(ALM)工具的核心协作平台,简单的说它是管理和开发软件项目的整个生命周期的 ...

  8. ElasticSearch(站内搜索)

    简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据.它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合.Elasticse ...

  9. python开发目录合并小工具 PathMerge

    前言 这个程序陆陆续续开发了几天,正好我在学Python,就一边做一边学,倒是学到不少东西. 不得不说python是快速开发的好工具. 程序做了一些改进,这两天又忙着毕设,现在才想起来发到博客上.想想 ...

  10. windows批处理语法

    写批处理文件,除了了解基本语法外,你还需要熟悉常用的windows命令,那就先看看这篇文章:windows常用命令 #重要说明 文件及目录路径:要使用反斜杠'\',不要使用正斜杠'/' 如:del d ...