php用token做登录认证
https://blog.csdn.net/qq_20869933/article/details/133201967
作用:
PHP 使用token验证可有效的防止非法来源数据提交访问,增加数据操作的安全性
实例:
第一种:
/** 第一步:生成token */
public function CreateToken($userid) {
//用户名、此时的时间戳,并将过期时间拼接在一起
$time = time();
$end_time = time() + 86400;//过期时间
$info = $userid . '.' . $time . '.' . $end_time; //设置token过期时间为一天
//根据以上信息信息生成签名(密钥为 SIGNATURE 自定义全局常量)
$signature = hash_hmac('md5', $info, SIGNATURE);
//最后将这两部分拼接起来,得到最终的Token字符串
return $token = $info . '.' . $signature;
} /** 第二步:验证token */
public function check_token($token)
{
/**** api传来的token ****/
if(!isset($token) || empty($token))
{
$msg['code']='400';
$msg['msg']='非法请求';
return json_encode($msg,JSON_UNESCAPED_UNICODE);
}
//对比token
$explode = explode('.',$token);//以.分割token为数组
if(!empty($explode[0]) && !empty($explode[1]) && !empty($explode[2]) && !empty($explode[3]) )
{
$info = $explode[0].'.'.$explode[1].'.'.$explode[2];//信息部分
$true_signature = hash_hmac('md5',$info,'siasqr');//正确的签名
if(time() > $explode[2])
{
$msg['code']='401';
$msg['msg']='Token已过期,请重新登录';
return json_encode($msg,JSON_UNESCAPED_UNICODE);
}
if ($true_signature == $explode[3])
{
$msg['code']='200';
$msg['msg']='Token合法';
return json_encode($msg,JSON_UNESCAPED_UNICODE);
}
else
{
$msg['code']='400';
$msg['msg']='Token不合法';
return json_encode($msg,JSON_UNESCAPED_UNICODE);
}
}
else
{
$msg['code']='400';
$msg['msg']='Token不合法';
return json_encode($msg,JSON_UNESCAPED_UNICODE);
}
}
第二种:
1、密钥设置
public $secretKey = 'hgakdfkljalfdjlk';//私钥
public $termValidity = 60;//有效时常(秒)
2、调用方式
$info = ['user_id' => 1]; //生成密钥
$this->CreateToken( $info); //校验密钥
$this->CheckToken($token);
3、基础方法
/**
*功能:生成token
*参数一:需要解密的密文
*参数二:密钥
*/
function CreateToken($data = []) {
if(empty($data)){
$data['code'] = '400';
$data['message'] = '非法请求';
return $data;
}
$data['request_time'] = time();//当前时间
$data['term_validity'] = $this->termValidity;//过期时间
$dataJson = json_encode( $data );
//根据以上信息信息生成签名
return $this->passport_encrypt($dataJson, $this->secretKey);
}
/**
*功能:校验token
*参数一:需要解密的密文
*参数二:密钥
*/
function CheckToken($token) {
if (!isset($token) || empty($token)) {
$data['code'] = '400';
$data['message'] = '非法请求';
return $data;
}
$explode =$this->passport_decrypt($token, $this->secretKey); //解析token
$expArr = json_decode($explode,true);
$checkToken = $this->passport_encrypt(json_encode($expArr), $this->secretKey);
$requestTime = $expArr['request_time'];
$termValidity = $expArr['term_validity'];
$checkTime = $requestTime+$termValidity;
//对比token
if($token != $checkToken){
$data['code'] = '400';
$data['message'] = '非法请求';
return $data;
}
$time = time();
if ($time > $checkTime) {
$data['code'] = '401';
$data['message'] = 'Token已过期,请重新登录';
return $data;
}
$data['code'] = '200';
$data['message'] = '合法Token';
return $data;
}
/*
*功能:对字符串进行加密处理
*参数一:需要加密的内容
*参数二:密钥
*/
function passport_encrypt($str,$key = 'secretKey'){ //加密函数
return base64_encode($this->passport_key($str,$key));
}
/*
*功能:对字符串进行解密处理
*参数一:需要解密的密文
*参数二:密钥
*/
function passport_decrypt($str,$key = 'secretKey'){ //解密函数
return $this->passport_key(base64_decode($str),$key);
}
/*
*辅助函数
*/
function passport_key($str,$encrypt_key){
$encrypt_key=md5($encrypt_key);
$ctr=0;
$tmp='';
for($i=0;$i<strlen($str);$i++){
$ctr=$ctr==strlen($encrypt_key)?0:$ctr;
$tmp.=$str[$i] ^ $encrypt_key[$ctr++];
}
return $tmp;
}
php用token做登录认证的更多相关文章
- 国服最强JWT生成Token做登录校验讲解,看完保证你学会!
转载于:https://blog.csdn.net/u011277123/article/details/78918390 Free码农 2017-12-28 00:08:02 JWT简介 JWT(j ...
- JWT生成Token做登录校验
一.JWT的优点 1.服务端不需要保存传统会话信息,没有跨域传输问题,减小服务器开销. 2.jwt构成简单,占用很少的字节,便于传输. 3.json格式通用,不同语言之间都可以使用. 二.使用JWT进 ...
- SSM基于Token的登录认证
1.什么是token token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识. 当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上 ...
- springboot,vue,shiro整合 关于登录认证功能
首先是session问题 传统session认证 http协议是一种无状态协议,即浏览器发送请求到服务器,服务器是不知道这个请求是哪个用户发来的.为了让服务器知道请求是哪个用户发来的,需要让用户提供用 ...
- 【项目实践】一文带你搞定Session和JWT的登录认证方式
以项目驱动学习,以实践检验真知 前言 登录认证,估计是所有系统中最常见的功能了,并且也是最基础.最重要的功能.为了做好这一块而诞生了许多安全框架,比如最常见的Shiro.Spring Security ...
- app与php后台接口登录认证、验证(seesion和token)
简要:随着电商的不断发展,APP也层次不穷,随着科技的发展主要登录形式(微信.QQ.账号/密码):为此向大家分享一下"app与php后台接口登录认证.验证"想法和做法:希望能够帮助 ...
- 基于JWT的Token登录认证(一)
1.JWT简介 JSON Web Token(缩写 JWT),是目前最流行的跨域认证解决方案. session登录认证方案:用户从客户端传递用户名.密码等信息,服务端认证后将信息存储在session中 ...
- 常用功能系列---【JWT生成Token实现接口登录认证方案思路】
JWT生成Token实现接口登录认证方案思路 方案一(双token实现无感刷新) 在token中,refreshToken的作用主要是避免token过期时,前端用户突然退出登录,跳转至登录页面. 但是 ...
- SpringMVC-拦截器做一个登录认证的小Demo
拦截器 拦截器的定义 处理器拦截器类似于servlet开发中的filter,用于对处理器进行预处理和后处理. 定义拦截器,实现HandlerInterceptor这个接口 接口的实现需要导入包impo ...
- 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证
注:下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angu ...
随机推荐
- 武装你的WEBAPI-OData使用Endpoint
本文属于 OData 系列文章 Introduction 更新: 由于新版的 OData 已经默认使用了 endpoint 模式(Microsoft.AspNetCore.OData 8.0.0),不 ...
- 体验.NET与文件存储服务MinIO
对象文件存储服务(OSS)主要用于存储零散的文件,和直接存储到本地文件系统中相比,有以下的几个优势: 跨服务器可用 兼容Amazon S3 API 横向扩容 高可用 支持加密 MinIO就是一个高性能 ...
- 程序员出海做 AI 工具:如何用 similarweb 找到最佳流量渠道?
如题,今天给大家带来实操的一个小教程.这里先抛出个问题:"做海外流量增长,如何为产品制定营销渠道?" 分享一个方法只需要 3 步,方法如下: 找到和你产品最接近的细分 Top 竞争 ...
- Linux系统安装python3.8与卸载教程
ln -sf /usr/local/python311/bin/python3.11 /usr/local/bin/python3ln -sf /usr/local/python311/bin/pyd ...
- 【转载】用shell命令一步步获取Java版本号
https://blog.csdn.net/f20052604/article/details/100269768 1.打印java -version命令echo $(java -version)输出 ...
- NoSuchAlgorithmException
今天在写UT时遇到了下面的问题: 1. 使用的powermock来处理static方法; 2. 静态方法里的却有使用到org.apache.http.client(4.3.1)的方法 异常如下: Ca ...
- vue3 路由的使用
添加一个router.js 配置文件 import { createRouter, createWebHistory } from 'vue-router' createRouter:用来创建 路由 ...
- 『AotuHotKey』——一个小巧却高效的实用效率工具
[!note] 本来主要是想找一下「」和『』,然后这个方法直接可以找到大部分的特殊字符 通过输入法输出 『Ctr + shift + Z』进入搜狗输入法的『符号大全』 在『标点符号』项可以找到「」和『 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 20 期(2025年1.1-1.5)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- Solution Set -「AGC 007~009」C~F
目录 「AGC 007C」Pushing Balls 「AGC 007D」Shik and Game 「AGC 007E」Shik and Travel ^ 「AGC 007F」Shik and Co ...