分类 编程 下的文章
如何让微信小程序支持 Cookie
微信原生的 wx.request 网络请求接口并不支持传统的 Cookie,但有时候我们现有的后端接口确于依赖 Cookie(比如服务器用户登录态),[weapp-cookie] 这个库可用一行代码为你的小程序实现 Cookie 机制,以保证基于 cookie 的服务会话不会失效,与 web 端共用会话机制。
安装
npm install weapp-cookie --save
将 npm 包复制到 vendor 文件夹,避免小程序可能不能找到文件(tips:使用 wepy/mpvue 等框架无需此步)
cp -rf ./node_modules/ ./vendor/
用法
在小程序根目录的 app.js 一行代码引入即可
// app.js
import './vendor/weapp-cookie/index'
// tips: 使用 wepy/mpvue 可以直接在入口 js 引入 weapp-cookie 模块
// import 'weapp-cookie'
App({
onLaunch: function () { }
// ...
})
php 整型数字对称加密,适用 ID 加密展示
程序开发过程中总是有一些自增ID信息会展现给前端,这样就给一些人可乘之机,通过遍历ID等方式获取到数据信息。
为了解决这个问题,想了很多办法,今天自己写了一个对称加密算法分享给大家。ID加密后展示到前端,后端先解密再处理。
代码如下,欢迎指正。
<?php
/**
* 整型数字对称加密,使用场景:对ID加密后展示
* 只适用整型数字
* 使用时请重新生成密钥
*/
class IntCode{
// 密钥(0-9A-Za-z)打乱,可使用str_shuffle()函数重新生成
private $key = 'PTvNKJdjOyB3niF891XCspl7rHMQIkELVqYbm20ZGUWhfze5txSRowg4uDA6ac';
public function encode($int){
//判断是否为整型
if (! is_int($int)) {
return '不是整型';
}
//将传入数字转换成十六进制分割成数组
$hexArr = str_split(dechex($int));
//将密钥分割成数组
$keyArr = str_split($this->key);
//密钥长度,推荐62
$keyLen = count($keyArr);
//随机数字
$rand = mt_rand(0, $keyLen - 1);
//将随机值压入结果开头
$str = $keyArr[$rand];
//验证码
$verfy = $keyArr[($keyLen - $rand + strlen($int)) % $keyLen];
//循环十六进制每一位数字,替换成密钥里的值
foreach ($hexArr as $v) {
$offset = hexdec($v) + $rand;
$str .= $keyArr[$offset % $keyLen];
}
//将验证码压入结果末尾并返回
return $str . $verfy;
}
public function decode($str){
//验证$str是否合法
if (! preg_match('/^[0-9a-zA-Z]{2,10}$/', $str)) {
return '字符不合法';
}
//将传入字符串分割成数组
$strArr = str_split($str);
//密钥
$key = $this->key;
//将密钥分割成数组
$keyArr = str_split($this->key);
//密钥长度
$keyLen = count($keyArr);
//十六进制数值
$hex = '';
//获取随机数
$rand = strpos($key, array_shift($strArr));
//获取验证码
$verfy = array_pop($strArr);
//循环每一个字串并转换成十六进制
foreach ($strArr as $k => $v) {
if (strpos($key, $v) >= $rand) {
$hex .= dechex(strpos($key, $v) - $rand);
} else {
$hex .= dechex($keyLen - $rand + strpos($key, $v));
}
}
//十六进制转换成十进制
$dec = hexdec($hex);
//判断验证码是否正确
if ($verfy !== $keyArr[($keyLen - $rand + strlen($dec)) % $keyLen]) {
return '校验错误,给定字符串不合法';
}
return $dec;
}
}
10 个雷人的注释,就怕你不敢用!
本文来源网络:
- 1、码农何苦为难穷逼
- 2、删了就无法运行,我也不知道为什么
- 3、早点睡吧,别改代码了
- 4、系统终止运行了
- 5、感觉念了一首诗
- 6、我刚写这段代码时,我和上帝知道这段代码的意思,现在只有上帝知道了
- 7、这样写还是生动形象的
- 8、客户需求怎么做
- 9、这个太狠了吧
- 10、老实的程序员
1、码农何苦为难穷逼
2、删了就无法运行,我也不知道为什么
// 写完这段就辞职
// 这段代码不知道谁写的
// 看起来没用
// 但是删完之后程序就跑不起来了
// 我也不知道为什么
酷Q Air发送表情代码 发送消息文本插入表情格式 [CQ:face,id=CQ码]
在酷Q Air机器人中,如何在发送消息内容中添加表情,这样至少可以做到表情+文字,让消息内容更加生动,更加美美哒~~~(注意:酷Q Air不支持发图、发语音)
用法
在酷Q发送消息内插入[CQ:face,id=XX];其中XX为下图的表情序号
官方旧版:
BAT 文件实现批量安装 .msu 补丁
从事网管工作的朋友,总会遇到一些局域网补丁更新不统一的问题,但是要每一台机都自行下载这补丁,未免太浪费网络带宽了。虽然可以通过其他计算机共享补丁,但补丁太多,总不能每个都手动点击安装吧?其实可以通过批处理解决。
1、将下载的补丁统一放到一个文件夹 hotfix:
2、在文件夹中新建一个 txt 文本文档 update.txt,输入以下内容:
FOR /R %%F IN (*.msu) DO start /wait wusa %%F /quiet /norestart
3、将 update.txt 的后缀名修改为 update.bat:
MySQL 提示 Field * doesn't have a default value 的解决办法
解决办法
在 MySQL 5.7 以上版本中,启用了严格模式。
在配置文件中 /etc/mysql/my.cnf 中找到:
sql-model=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
修改为:
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启 MySQL
STRICT_TRANS_TABLES 存储引擎启用严格模式,非法数据值被拒绝
出现此问题的原因
在 MySQL 5.0.2 以前,MySQL 对非法值检查并不严厉,而且为了数据输入还会强制将他们变为合法值。
在 MySQL 5.0.2 以后的版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而使得服务器能够拒绝并放弃出现不良值的语句。
严格模式
如果未使用严格模式,下面的情况是合法的:
CentOS 中 iptables 和 firewall 防火墙开启、关闭、查看状态、基本设置
CentOS7 默认使用的是 firewall 作为防火墙
firewall 防火墙
1、查看 firewall 服务状态
systemctl status firewalld
2、查看 firewall 的状态
firewall-cmd --state
3、开启、重启、关闭、firewalld.service 服务
停止 firewall
systemctl stop firewalld.service
开启 firewall
systemctl start firewalld.service
禁止 firewall 开机启动
systemctl disable firewalld.service
4、开启、重启、关闭、firewalld.service 服务
开启 firewall
service firewalld start
关于 PHP 时间戳最大支持到 2038 年问题解决办法
原因分析
这个问题在 64 位的 PHP 版本中并不存在,因为是在 32 位版本中,以秒计算 PHP 只支持到 2147483648,即:2^31,到 2038-01-19 03:14:08。
有效的时间戳通常从 Fri, 13 Dec 1901 20:45:54 GMT 到 Tue, 19 Jan 2038 03:14:07 GMT(对应于 32 位有符号整数的最小值和最大值)。不是所有的平台都支持负的时间戳,那么日记范围就被限制为不能早于 Unix 纪元。这意味着在 1970 年 1 月 1 日之前的日期将不能用在 Windows,一些 Linux 版本,以及几个其它的操作系统中。不过 PHP 5.1.0 及更新的版本克服了此限制。 —— [ PHP手册 ]
解决办法
如果在32系统PHP 5.1.0之后的版本,可以使用new DateTime解决。代码如下:
将时间戳转为年月日:
$d = new DateTime("@21474836490");
$d->setTimezone(new DateTimeZone("PRC"));
echo $d->format("Y-m-d H:i:s");
将年月日转为时间戳:
$d = new DateTime('2650-07-06 16:21:30');
echo $d->format('U');
如果运行时,遇到如下报错:
WARNING: It is not safe to rely on the system’s timezone settings
PHP 使用 CURL 不依赖 COOKIEJAR 获取 COOKIE 的方法
使用 COOKIEJAR 方法
PHP 中 CURL 类在做请求时非常好用,对于COOKIE,CURL类也有很不错的支持。
获得 COOKIE 并存为文件:
// 把 COOKIE 保存至 cookie.txt
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
// COOKIE 文件存放在至 temp 文件夹下的随机文件
$cookie_file = tempnam('./temp','cookie');
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
读取文件并携带 COOKIE:
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
先把 COOKIE 保存文件,调用的时候再读取文件。
使用正则表达式
使用 COOKIEJAR 方法,会有两次 IO 操作,对效率有一定的损失。且运行在 BAE/SAE/GAE 等云计算平台时,不支持本地文件写入。使用正则表达式可以解决这些问题。