网页上经常有一些自动登录的checkbox,勾选后,下次进入该网站,无需登录,即可执行一些需要登录才能执行的操作。上班无事,用thinkphp做了下。
参考网址:[thinkphp实现自动登录](https://www.cnblogs.com/kongxs/archive/2013/11/14/3423181.html)
[TOC]
## 思路分析
### 初次登录时:
首先,加密
其次,写入cookie
### 再次登录时:
首先,解密
其次,判断信息是否一致
## 一、HTML
```
<form action="{:U('login')}" method='post' name='login'>
<p>
<input type="checkbox" name='auto' checked='1' class='auto' id='auto'/>
<label for="auto">下次自动登录</label>
</p>
</form>
```
## 二、自定义加密函数
文件位置:Index/Common/common.php
```
/**
* 异位或加密字符串
* @param [String] $value [需要加密的字符串]
* @param [integer] $type [加密解密(0:加密,1:解密)]
* @return [String] [加密或解密后的字符串]
*/
function encryption ($value, $type=0) {
$key = md5(C('ENCTYPTION_KEY'));
if (!$type) {
return str_replace('=', '', base64_encode($value ^ $key));
}
$value = base64_decode($value);
return $value ^ $key;
}
```
## 三、配置文件
```
<?php
return array(
//用于异位或加密的KEY
'ENCTYPTION_KEY' => 'www.psnav.com',
//自动登录保存时间
'AUTO_LOGIN_TIME' => time() + 3600 * 24 * 7, //一个星期
);
?>
```
## 四、后台处理
```
/**
* 登录表单处理
*/
Public function login () {
if (!$this->isPost()) {
halt('页面不存在');
}
//提取表单内容
$account = $this->_post('account');
$pwd = $this->_post('pwd', 'md5');
$where = array('account' => $account);
$user = M('user')->where($where)->find();
if (!$user || $user['password'] != $pwd) {
$this->error('用户名或者密码不正确');
}
if ($user['lock']) {
$this->error('用户被锁定');
}
//处理下一次自动登录
if (isset($_POST['auto'])) {
$account = $user['account'];
$ip = get_client_ip();
$value = $account . '|' . $ip;
$value = encryption($value);
@setcookie('auto', $value, C('AUTO_LOGIN_TIME'), '/');
}
//登录成功写入SESSION并且跳转到首页
session('uid', $user['id']);
header('Content-Type:text/html;Charset=UTF-8');
redirect(__APP__, 3, '登录成功,正在为您跳转...');
}
```
## 五、自动登录处理
```
/**
* 自动运行的方法
*/
Public function _initialize () {
//处理自动登录
if (isset($_COOKIE['auto']) && !isset($_SESSION['uid'])) {
$value = explode('|', encryption($_COOKIE['auto'], 1));
$ip = get_client_ip();
//本次登录IP与上一次登录IP一致时
if ($ip == $value[1]) {
$account = $value[0];
$where = array('account' => $account);
$user = M('user')->where($where)->field(array('id', 'lock'))->find();
//检索出用户信息并且该用户没有被锁定时,保存登录状态
if ($user && !$user['lock']) {
session('uid', $user['id']);
}
}
}
//判断用户是否已登录
if (!isset($_SESSION['uid'])) {
redirect(U('Login/index'));
}
}
```
if(isset($_COOKIE['auto']) && !$_SESSION['uid']){}这个判断用来判断用户的cookie中有auto值,并且没有登录时,假如验证成功,则进一步验证ip与上次ip是否一致,验证用户名是否存在于数据库中,如果验证通过,则写入session,由此实现自动登录。其中encryption($_COOKIE['auto'],1)
是一个解密函数,将加密后的用户名和密码解密出来进行验证。
- Layer无刷新不跳转弹框提示信息
- 整合ThinkPHP+实用代码
- TP整合Layer插件实现无刷新
- 自定义助手函数
- 添加信息失败后不跳转
- 三种无限级分类
- TP常用代码
- 自定义公共函数
- TP模型管理专题
- TP模型管理之添加模型
- sfox_newmodel.sql
- TP模型管理之删除模型
- TP模型管理之编辑模型
- TP模型管理之字段添加
- sfox_newmodel.sql_edit
- layer_hplus.js_edit
- TP模型管理之字段删除
- TP模型管理之字段编辑
- TP模型管理之预览模型
- TP模型管理之公共函数
- layer_hplus.js_修订一
- TP模型管理之预览模型静态页
- 后台内容管理系统
- 分类树显示
- 内容列表显示
- 信息发布
- 编辑信息
- layer_hplus.js
- myJs第一版
- myJs第二版
- myJs第三版
- myJs第四版
- TP5插件用法
- Datatables
- WebUploader
- bootstrap-fileinput
- UEditor
- 简单调用
- 路径问题
- 跨域多图上传
- 跨域单图上传
- UEditor图片跨域上传解决方案
- 定制工具栏图标
- ajaxFileUpload
- LayUI
- 图片上传
- layui分页
- 搜索页
- 搜索优化及删除
- Uploadify
- TP5前端应用
- 静态首页
- 前台首页功能实现
- 自定义标签库
- 前台模板继承应用
- 首页自定义标签改进
- 文章内容页
- 自定义标签改进
- 自定义标签修正
- 图片等比例自动缩放
- 后台权限管理
- 角色管理
- 规则管理
- 权限设置
- 会员管理
- 权限管理
- 前台登录注册功能
- 注册登录
- 阿里大于手机注册
- 阿里大于升级阿里云短信服务
- 自动登录完成
- PHP异位或加密实现自动登陆
- 微信开发
- 分享接口
- 静态页面实现微信分享
- 动态页微信分享
- 页面静态化
- 1-全站静态化前期配置
- 2-链接地址静态化
- TP5常用片段代码
- 加载静态资源路径与常量
- thinkphp5预定义常量
- 删除某文件夹的内容
- 解压插件包
- 异步提交插件
- 其他功能
- 背景音乐
- 手机访问PC网站自动跳转到手机网站代码
- 手机微信音乐MP3播放器
- 后盾之网页背景音乐
- 播放器宽度自适应
- 前台首页数据调用
- 视频列表
- 搜索分页
- H5解决苹果(IOS)不能自动播放音乐
- 清空缓存
- 文件处理常识
- 删除路径下的所有文件夹和文件
- 一键清空缓存
- 评论留言
- 格式化时间
- 替换微博内容的URL地址@用户与表情
- PHP正则理解
- jQuery评论插件
- TP空操作
- TP路由
- 跨域访问
- 设置请其头允许跨域请求
- 模板前台判断手机访问跳转手机网址代码
- PHP遍历一个文件夹下所有文件和子文件夹
- PHP获取视频的第一帧与时长
- TP5数据库
- 链式操作原理
- update替换字段部分内容
- 后台开发
- 后台登录页居中显示
- TP5自带验证码
- JS & JQuery专题
- 二级城市联动菜单
- 模板引擎
- 混合模板编译
- 黄永成TP微博开发
- 消息推送
- memcache安装
- 插件开发
- 插件介绍
- 插件钩子
- 浅谈初步理解钩子
- 插件钩子(hooks)分析
- 插件钩子简单理解
- 控制器调用插件
- 钩子通用处理函数
- 插件基类代码
- 插件测试代码
- 浅谈钩子与插件
- 技术综合
- 常用代码
- PHP
- 56个PHP开发常用代码片段(上)
- 56个PHP 开发常用代码片段(中)
- 56个PHP 开发常用代码片段(下)
- sublime text安装自动补全注释的插件
- 影音视频开发
- 视频
- H5视频直播扫盲
- 音乐
- 语音
- PHP实现语音播报功能
- MUI
- 窗体操作