ThinkPHP做自动登陆及异位或加密COOKIE!
异位或加密方法:
/*
*登陆如果自动登陆加密
*默认是0解密状态,1是加密
*采用的方法是异位或加密
*/
function encrytion($value,$type=0){
$key = md5(C('AUTO_LOGIN_KEY'));
//加密
if($type){
// 64位加密
//return base64_encode($value ^ $key);
// 加密后可能会有等号
return str_replace('=','',base64_encode($value ^ $key));
};
$value = base64_decode($value);
return $value ^ $key;
}
在Config.php文件中设置异位或加密字段及自动登陆有效时间:
<?php
return array(
//'配置项'=>'配置值'
//异位或加密
'AUTO_LOGIN_KEY' => md5('www.ask.com'),
//自动登陆有效时间
'AUTO_LOGIN_TIME' => time() +3600*24*7,
'LV_LOGIN' => 1,
);
如果要自动登陆,设置cookie:保存自动登陆账号的ID,IP,和账号:(login控制器)
// 判断下一次是否自动登陆
if(isset($data['auto'])){
$value = $user['id'].'|'.get_client_ip().'|'.$user['username'];
//echo $value."<hr>"; // 需要保存的信息 1|127.0.0.1|赵子龙
//进行加密
$value = encrytion($value,1);
//echo $value."<br>"; //加密结果
//解密
$val = encrytion($value,0);
//echo $val; // 解密结果
// 设置 COOKIE
@setcookie('auto',$value,C('AUTO_LOGIN_TIME'),'/');
};
判断COOKIE及自动登陆:
class CommonController extends Controller {
Protected function _initialize(){
//if(!C('WEB_STATE')){$this->error('网站正在维护中...');};
//是否自动登陆
//判断是否有COOKIE 且 没有登陆
if(isset($_COOKIE['auto']) && !isset($_SESSION['uid'])){
$value = $_COOKIE['auto'];
$value = encrytion($value,0);
//echo $value; // 1|127.0.0.1|赵子龙
// 拆成数组
$value = explode('|',$value);
if($value[1] == get_client_ip()){
session('uid',$value[0]);
session('username',$value[2]);
}
};
}
}
整个控制器:
<?php
namespace Home\Controller;
use Think\Controller;
class CommonController extends Controller {
Protected function _initialize(){
//if(!C('WEB_STATE')){$this->error('网站正在维护中...');};
//是否自动登陆
//判断是否有COOKIE 且 没有登陆
if(isset($_COOKIE['auto']) && !isset($_SESSION['uid'])){
$value = $_COOKIE['auto'];
$value = encrytion($value,0);
//echo $value; // 1|127.0.0.1|后盾网
// 拆成数组
$value = explode('|',$value);
if($value[1] == get_client_ip()){
session('uid',$value[0]);
session('username',$value[2]);
}
};
}
public function login(){
//if(IS_POST){$this->error('页面不存在');};
$data = I('post.');
//p($data);die;
$dataPad = I('post.pwd','','md5');
$db = M('user');
$where = array('account'=>$data['account']);
$field = array('id','username','password','logintime','lock');
$user = $db->where($where)->field($field)->find();
if(!$user || $user['password'] != $dataPad){
$this->error('账号或密码错误');
};
// 如果正确就继续往下走
// 判断是否锁定
if(!$user['lock']){
$this->error('账号被锁定');
};
// 判断下一次是否自动登陆
if(isset($data['auto'])){
$value = $user['id'].'|'.get_client_ip().'|'.$user['username'];
//echo $value."<hr>"; // 需要保存的信息 1|127.0.0.1|赵子龙
//进行加密
$value = encrytion($value,1);
//echo $value."<br>"; //加密结果
//解密
$val = encrytion($value,0);
//echo $val; // 解密结果
// 设置 COOKIE
@setcookie('auto',$value,C('AUTO_LOGIN_TIME'),'/');
};
//每天登陆增加经验
// 读取它上一次的登陆时间,在和今天的 0点0时0分0秒 对比 如果小就是新登陆
$today = strtotime(date('Y-m-d'));
$where = array('id'=>$user['id']);
if($user['logintime']<$today){
$db->where($where)->setInc('exp',C('LV_LOGIN'));
}
//更新时间
$db->where($where)->save(array('logintime'=>time())); //写入到session
session('uid',$user['id']);
session('username',$user['username']);
//从那个页面来就跳转到那个页面去
redirect($_SERVER['HTTP_REFERER']);
}
//退出登录
Public function logout () {
session_unset();
session_destroy();
redirect(__APP__);
}
}
ThinkPHP做自动登陆及异位或加密COOKIE!的更多相关文章
- shiroWeb项目-记住我(自动登陆实现)(十五)
用户登陆选择“自动登陆”本次登陆成功会向cookie写身份信息,下次登陆从cookie中取出身份信息实现自动登陆. 用户身份实现java.io.Serializable接口便于反序列化 package ...
- php 品牌全车零件订购平台( 带采集数据 及 账号自动登陆【已绕过https证书加密】,php源码 ,QQ: 876635409 )
php捷豹路虎 品牌全车零件订购平台 ( 带采集数据 及 账号自动登陆[已绕过https证书加密],php源码 ,QQ: 876635409 [由于咨询用户太多,请备注:汽车配件]) 一.php+m ...
- thinkphp实现自动登录
网页上经常有一些自动登录的checkbox,勾选后,下次进入该网站,无需登录,即可执行一些需要登录才能执行的操作.上班无事,用thinkphp做了下 1 下面是一个很普通的form表单,有一个chec ...
- shell实现SSH自动登陆
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...
- Vue、Vuex+Cookie 实现自动登陆 。
概述 1.自动登陆实现思路. 2.vuex + cookie 多标签页状态保持. 自动登陆的需求: 1.登陆时勾选自动登陆,退出登陆或登陆到期后再次登陆后自动填写表单(记住密码)或访问登陆页自动登陆. ...
- UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包
背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西. 会的同学请看一下指出错误,不会的同学请先自行脑补 ...
- 在win10中创建开机自动登陆的网络驱动器
前提环境: win10系统电脑一台. centos系统电脑一台,在该系统中安装samba,并配置共享. 要解决的问题: 在win10做了网络映射,将centos共享的文件夹设置成本地硬盘.在映射时,也 ...
- 使用ssh公钥密钥自动登陆linux服务器
转自:http://7056824.blog.51cto.com/69854/403669 作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远程操作是每天工作的一部分.但随着服务器的 ...
- 让 Putty 保存密码,自动登陆的四种方法
Putty 基本是我在紧急时候用来登陆 Linux/Unix 终端的不二之先,因其小,开源,界面也非常实用.可是当你要在私有的机器上,经常性的要登陆很多机器的时候就觉得烦琐了,不光打开一堆的窗口,还要 ...
随机推荐
- 关于Cocos2d-x中类与类之间调用彼此方法的机制
1.一般情况下都是把需要实例化的对象类的头文件包含到一个GameController.h中,再在GameController.cpp文件里面去使用各种对象类的方法来实现游戏的逻辑. 2.还有的时候会把 ...
- TensorFlow基础笔记(13) Mobilenet训练测试mnist数据
主要是四个文件 mnist_train.py #coding: utf-8 import os import tensorflow as tf from tensorflow.examples.tut ...
- IE屏蔽鼠标右键、禁止复制粘贴等功能
<body oncontextmenu="return false" onselectstart="return false" ondragstart=& ...
- buildroot制作文件系统
/******************************************************************* * buildroot制作文件系统 * 使用buildroot ...
- Android开源库集锦(转)
一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才开始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的所有平台, ...
- 抽象工厂模式(abstract factory pattern)------创造型模式
创建型模式:抽象工厂模式 引入概念: 1.产品等级结构:当抽象的产品由具体的工厂生产出不同的产品时,这些归属与同一类的抽象产品就构成了产品等级结构: 2.产品族:具体的工厂可以生产出来的不同产品就构成 ...
- Git 基础 - 查看提交历史
查看提交历史 在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看. 接下来的例子会用我专门用于演示的 simplegit 项目,运行下面的命令获取该项目源 ...
- Win8快捷键收集大汇总
键盘党的用户有福了,熟悉操作系统快捷键,提高开发效率. Windows 8 常用快捷键: Windows 键 可在开始屏幕主菜单及最后一个应用程序间循环切换 Windows 键 + C 打开“超级按钮 ...
- VC++实现编辑框输入提示效果
编辑框在第一次输入时最好给出一个虚拟的输入提示信息文本,这样的效果更佳友好.,我在编辑框添加灰色提示字(html+VC)一文中简单介绍了一些方法,但是效果欠佳. 原始的编辑框CEdit类没有这样的功能 ...
- Git 的BUG小结
Git 的BUG小结 Git 在push的时候出现了: fatal: The remote end hung up unexpectedly 在网上找了非常多 发现出现了下面错误提示也可能是同样的问 ...