异位或加密方法:

/*
*登陆如果自动登陆加密
*默认是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!的更多相关文章

  1. shiroWeb项目-记住我(自动登陆实现)(十五)

    用户登陆选择“自动登陆”本次登陆成功会向cookie写身份信息,下次登陆从cookie中取出身份信息实现自动登陆. 用户身份实现java.io.Serializable接口便于反序列化 package ...

  2. php 品牌全车零件订购平台( 带采集数据 及 账号自动登陆【已绕过https证书加密】,php源码 ,QQ: 876635409 )

    php捷豹路虎 品牌全车零件订购平台  ( 带采集数据 及 账号自动登陆[已绕过https证书加密],php源码 ,QQ: 876635409 [由于咨询用户太多,请备注:汽车配件]) 一.php+m ...

  3. thinkphp实现自动登录

    网页上经常有一些自动登录的checkbox,勾选后,下次进入该网站,无需登录,即可执行一些需要登录才能执行的操作.上班无事,用thinkphp做了下 1 下面是一个很普通的form表单,有一个chec ...

  4. shell实现SSH自动登陆

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  5. Vue、Vuex+Cookie 实现自动登陆 。

    概述 1.自动登陆实现思路. 2.vuex + cookie 多标签页状态保持. 自动登陆的需求: 1.登陆时勾选自动登陆,退出登陆或登陆到期后再次登陆后自动填写表单(记住密码)或访问登陆页自动登陆. ...

  6. UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

    背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西. 会的同学请看一下指出错误,不会的同学请先自行脑补 ...

  7. 在win10中创建开机自动登陆的网络驱动器

    前提环境: win10系统电脑一台. centos系统电脑一台,在该系统中安装samba,并配置共享. 要解决的问题: 在win10做了网络映射,将centos共享的文件夹设置成本地硬盘.在映射时,也 ...

  8. 使用ssh公钥密钥自动登陆linux服务器

    转自:http://7056824.blog.51cto.com/69854/403669 作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远程操作是每天工作的一部分.但随着服务器的 ...

  9. 让 Putty 保存密码,自动登陆的四种方法

    Putty 基本是我在紧急时候用来登陆 Linux/Unix 终端的不二之先,因其小,开源,界面也非常实用.可是当你要在私有的机器上,经常性的要登陆很多机器的时候就觉得烦琐了,不光打开一堆的窗口,还要 ...

随机推荐

  1. 用window调用kjb和ktr

    1.    运行cmd,进入kettle的目录cd C:\soft\kettle\data-integration 2.    运行start pan.bat命令 Pan—转换执行器(命令行方式),一 ...

  2. BOOTH 算法的简单理解

    学习FPGA时,对于乘法的运算,尤其是对于有符号的乘法运算,也许最熟悉不过的就是 BOOTH算法了. 这里讲解一下BOOTH算法的计算过程,方便大家对BOOTH的理解.        上图是BOOTH ...

  3. selenium测试(Java)(三)

    控制浏览器: http://www.cnblogs.com/moonpool/p/5657752.html

  4. Mysql数据库中InnoDB和MyISAM的差别

    Mysql数据库中InnoDB和MyISAM的差别 InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理, ...

  5. struts2将数据通过Json格式显示于EasyUI-datagrid数据表格

    1.搭建ssh开发环境 2.写好Dao.service等方法 3.建立DTO数据传输对象: package com.beichende.sshwork.user.web.dto; import jav ...

  6. PHP截断函数mb_substr()

    提示:mb_substr在于php中是默认不被支持的我们需要在在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到;extension=php_mbstring.dll ...

  7. Ubuntu Server 下的网络配置

    $ ifconfig 配置DHCP客户端$ sudo vi /etc/network/interfaces加入 iface eth0 inet dhcp 配置静态IP地址$ sudo vi /etc/ ...

  8. MathType只有你会的几个技巧

    太阳的后裔终于结局了,我们的乔妹被宋仲基撩走了,其中的撩妹技能你学到了几招?没学会,不要紧,还有MathType!只要你会MathType这几个技巧,撩妹绝对杠杠的.这可是连宋仲基都不会的! Math ...

  9. downtown uptown

    Downtown is a term primarily used in North America by English speakers to refer to a city's core (or ...

  10. Git高级操作

    本文是在Git操作指南基础上衍生出来的高级操作,如果你对git不是很熟悉,建议你先阅读Git操作指南. 一.忽略提交特定文件 如果你不想让一些文件上传到git仓库中,可以让Git忽略特定文件或是目录, ...