异位或加密方法:

/*
*登陆如果自动登陆加密
*默认是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. js彈出層或者js彈出引用url Frame 層

    function Popup() { var _this = this; this.CssName = "layermask";//樣式 //遮蓋層 this.hiddLayer ...

  2. SQL计算表的列数

    select count(syscolumns.name) from syscolumns , sysobjects where syscolumns.id = sysobjects.id and s ...

  3. Java获取yahoo天气预报

    学习闲暇之余,写了个获取yahoo天气预报的java小程序,仅供娱乐. 首先我们需要获取您需要查询城市对应的代号,我们可以用HashMap来查询,代码如下: publicstatic HashMap& ...

  4. 【转】Microsoft .Net Remoting 之.Net Remoting基础篇

    .Net Remoting基础篇 一.Remoting基础 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式.从微软的产品角度来看,可以说Remoting就是DCOM的一种升级, ...

  5. k-means算法及matlab实现

    K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢?  ...

  6. 2014Esri全球用户大会之影像和栅格

    1.现在Esri已将影像作为GIS解决方案的一部分,其详细战略部署是如何的? 在过去的十年.Esri有规划的在ArcGIS平台(主要为Desktop和Server)中管理和开发影像和栅格功能.这包含影 ...

  7. perl 脚本将phred33 转换为phred64

    今天用fastx_tookit 时遇到问题, 我的fastq 文件的碱基质量值格式为phred33, 而fastq_tookit 默认碱基质量值的格式为phred64, 所以报错了,提示我的fastq ...

  8. SVN中Revert changes from this revision 跟Revert to this revision

    譬如有个文件,有十个版本,假定版本号是1,2,3,4,5,6,7,8,9,10. Revert to this revision: 如果是在版本6这里点击“Revert to this revisio ...

  9. ASP.NET动态添加用户控件的方法

    本文实例讲述了ASP.NET动态添加用户控件的方法.分享给大家供大家参考.具体实现方法如下: 为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返 ...

  10. PHPCMS v9在后台文章管理列表添加类别

    进入PHPCMS v9后台—内容,进入PHPCMS的文章管理列表,要实现在文章标题前显示文章类别,就是可以直接在文章列表里看到类别,不需要点击进入编辑页面才可以看到,如下图: PHPCMS v9在后台 ...