简单的行为控制管理方法,自动登录,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(' ', (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定时验证码过期的更多相关文章
- SpringBoot学习:整合shiro(rememberMe记住我后自动登录session失效解决办法)
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 定义一个拦截器,判断用户是通过记住我登录时,查询数据库后台自动登录,同时把用户放入ses ...
- spring boot:spring security给用户登录增加自动登录及图形验证码功能(spring boot 2.3.1)
一,图形验证码的用途? 1,什么是图形验证码? 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers ...
- pyppeteer 登录一般网站 并利用 http方法获取登录页面的验证码
主函数 新建浏览器,进行登录,由于验证码的识别准确率不是百分之百,需要多次尝试. async def main(self, username, pwd, url): # 定义main协程函数, log ...
- c#控制WPF程序自动登录(Automation方式实现)
说明:winForm窗体,可以通过win32接口dll的findWindow之类的函数来实现查找winform窗口,mfc窗口等. 但是wpf却是不实用这些,可以靠automation方式来进行操作. ...
- MVC 自定义特性(验证用户登录session是否已经过期)
新建一个类 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] publ ...
- 运行control userpasswords2实现winXP自动登录
原文:运行control userpasswords2实现winXP自动登录 如果你的计算机只是自己一人在用,且每次都用同一个用户名(或者你根本没在意过什么是用户名),而每次都要输入密码,是否太麻烦了 ...
- QQ模拟自动登录实现
QQ模拟自动登录实现 本篇文章主要介绍"QQ模拟自动登录实现(带验证码)",主要涉及到java 实现QQ自动登录(带验证码)方面的内容,对于java 实现QQ自动登录(带验证码)感 ...
- 设置Windows Server 2022、Win10、Win11自动登录的简单方法-OK
这里介绍自己从使用 Windows Server 2003 到 Windows Server 2022 一直都在使用的自动登录系统的方法,屡试不爽.网上讨论的方法太繁琐,所以共享出来,供大家参考.该方 ...
- C#三种模拟自动登录和提交POST信息的实现方法
网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法. 网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以 ...
随机推荐
- 搭建一个简单struts2框架的登陆
第一步:下载struts2对应的jar包,可以到struts官网下载:http://struts.apache.org/download.cgi#struts252 出于学习的目的,可以把整个完整的压 ...
- linux source
清华TUNA镜像源https://mirrors.tuna.tsinghua.edu.cn/ 中科大USTC镜像源 https://mirrors.ustc.edu.cn/ ali http://mi ...
- php 操作数组 (合并,拆分,追加,查找,删除等)
1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: array array_merg ...
- linux下添加mysql用户并授权
-------------------暂停mysqlservice mysqld stop 忘记密码修改流程1,修改mysql配置文件 /etc/my.cnf,在[mysqld]下添加一行skip-g ...
- VR技术的系统化实现阶段
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 从20世纪80年代至80年代中期,虚拟现实技术的基本概念开始逐渐形成和完善.这一时期出现了一些比较经典的 ...
- CSS常用知识点
块级元素:width宽和height高有效. 内联元素:width宽和height高无效. 1.float:该属性的值指出了对象是否及如何浮动. none:设置对象不浮动left:设置对象浮在左边ri ...
- Delphi:与VCL同步(Synchronize()、用消息来同步)
看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件.临界区.Synchronize.WaitFor……) 先说一下RTL和VCL RTL(Run-Time library ...
- 3.Java异常进阶
3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...
- 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2<=n<=1000),a(2<=a<=1000) 输出: 一个整数. ...
- AutoMapper搬运工之初探AutoMapper
写在前面 知道AutoMapper很久了,但是一直没有用,最近刚好有个场景需要就用了,果然是利器.看了git上的wiki,发现内容其实wiki上写的很全面了,深入的暂时还没挖掘到.不过和群里的朋友交流 ...