异位或加密方法:

/*
*登陆如果自动登陆加密
*默认是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. [oracle] 系统权限管理

    1 利用超级用户连接到数据库登录 sqlplus / as sysdba or slqplus SYS/SYSPWD as sysdba 这两个命令的效果是一样的,都是以sysdba的身份使得SYS管 ...

  2. ThinkPHP3.2 介绍

    模块化 驱动化 为云平台而生ThinkPHP3.2正式版发布! ThinkPHP是国内领先的WEB应用开发框架,诞生于2006年初,在国内具有良好的口碑和广大的用户群,秉承了大道至简的开发理念,让WE ...

  3. C++ STL 教程

    C++ STL 教程在前面的章节中,我们已经学习了 C++ 模板的概念.C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的 ...

  4. asp.net mvc中加入log4net记录错误日志

    直接上代码示例:https://share.weiyun.com/aff36f2547514cfefe129ebb8ccb28ef 首先添加加log4net的dll,推荐用nuget.... 贴上配置 ...

  5. 深入浅出Redis-redis哨兵集群[转]

    1.Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所 ...

  6. mysql5.7 编码统一utf-8

    查看mysql数据库编码: show variables like 'character%'; mysql> show variables like 'character%'; +------- ...

  7. Windows路径操作API函数学习

    前言 在VC++开发过程中,经常需要用到一些路径操作,比如拼需要的文件路径,搜索路径中的内容等等.Windows提供了一套关于路径操作的API帮助我们更好的执行这些操作. 路径截断与合并API Pat ...

  8. C#导出Excel按照指定格式设置单元格属性值

    最近项目中一直在写XML.Table.Excel之间的转化.之前一直都是不考虑格式的导出,今天给出一个格式,让按照格式导出,还真把我这新手为难了一翻,网上给出的资料基本一样.为了一个单元格文字变色纠结 ...

  9. iOS 注冊本地通知(推送)

    注:按Home键让App进入后台执行时.方可查看通知. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithO ...

  10. Effective C++ Item 33 Avoid hiding inherited names

    class Base { private: int x; public: ; virtual void mf2(); void mf3(); ... }; class Derived: public ...