网页上经常有一些自动登录的checkbox,勾选后,下次进入该网站,无需登录,即可执行一些需要登录才能执行的操作。上班无事,用thinkphp做了下

1 下面是一个很普通的form表单,有一个checkbox 用来标志是否选择了自动登录。

tpl/Login/index.html

<div class='demo'>
<form action="{:U(dologin)}" method="post">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="password"/><br/>
<input type="checkbox" name='auto'/>自动登录<br/>
<input type="submit" value='提交'/>
</form>
</div>

2 下面是提交处理方法 Lib/Action/loginAction.class.php

  //处理登陆表单提交
public function dologin() {
if (!$this->isPost()) {
halt('页面不存在');
}
$m = M('user');
//dump($m);
$username = $this->_post('username');
$password = $this->_post('password');
$where = array('username' => $username);
//判断用户名是否存在
if ($m->where($where)->getField('id')) { $where = array('username' => $username, 'password' => $password);
//判断用户名密码是否一致
if ($id = $m->where($where)->getField($id)) {
$_SESSION['uid'] = $id;
//如果勾选了自动登录,则将用户名和ip写入cookie中
if (isset($_POST['auto'])) {
$ip= get_client_ip();
$value=$username."|".$ip; $value=encryption($value);
setcookie('auto',$value,C('AUTO_LOGIN_TIME'),'/');
}
header("content-type:text/html;charset=utf-8");
$this->redirect('/Index/index', array(), 3, '登陆成功,正在跳转'); }
} else {
$this->error('用户名不存在');
}
}

可以看到代码整体基本都是用户名密码的验证,其中isset($_POST['auto'])是勾选自动登录后,写入cookie。其中encryption()函数是一个加密函数

3写一个action基类,CommonAction常用的Action都去继承这个类

class CommonAction extends Action {

    Public function _initialize() {
//如果$_COOKIE['auto']存在,并且用户不在登录状态
if(isset($_COOKIE['auto']) && !$_SESSION['uid']){
$value= explode('|',encryption($_COOKIE['auto'],1));
//查看ip是否一致
if($value[1]= get_client_ip()){
$m=M('user');
$where=array('username'=>$value[0]);
//检查用户名
if($id=$m->where($where)->getField('id')){
$_SESSION['uid']=$id;
}
}
}
if(!isset($_SESSION['uid'])){ redirect(U('login/index'));
}
} }
if(isset($_COOKIE['auto']) && !$_SESSION['uid']){}这个判断用来判断用户的cookie中有auto值,并且没有登录时,假如验证成功,则进一步验证ip与上次ip是否一致,验证用户名是否存在于数据库中,如果验证通过,则写入session,由此实现自动登录。其中encryption($_COOKIE['auto'],1)
是一个解密函数,将加密后的用户名和密码解密出来进行验证。 ps:加密解密函数如下,可以写在common/common.php作为函数进行使用
/**
*
* @param string $value 要加密的值
* @param int $type 0加密 1解密
*/
function encryption($value,$type=0){
$key=md5(C('ENCRYPTION_KEY'));
if($type==0){ $value=$key^$value;
$value= str_replace('=','',base64_encode($value));
return $value;
}else if($type==1){
$value= base64_decode($value);
return $value^$key;
}
}

thinkphp实现自动登录的更多相关文章

  1. Linux开机自动登录(文本模式)

    • Linux系统启动登录过程 以RedHat/CentOS为例,Linux系统Level3模式下从启动到登录的整个过程大致如下: 1> 加载BIOS信息:包含了CPU/显卡/内存/硬盘/网卡等 ...

  2. expect实现自动登录

    自动登录主机(ssh) 建脚本item2login.sh,包含如下内容 #!/usr/bin/expect set timeout 30 spawn ssh -p [lindex $argv 0] [ ...

  3. cookie自动登录的实现

         cookie自动登录是指把用户登录的信息按期限(自定)保存在客户端,当用户请求登录时判断客户端用没有cookie对象,有的话填充值,否则登录界面的输入框为空,不进行填充.      登录界面 ...

  4. windows 2003自动登录的具体步骤

    在win2003系统中,使用最多的可能就是远程操作了,关于远程操作的那些事很多用户还是有些迷茫的.如果win2003系统远程重启后,要重新登录系统十分的麻烦,如何才能实现重启后的自动登录呢?让高手告诉 ...

  5. 如何设置phpMyAdmin自动登录和取消自动登录

    如何设置phpMyAdmin自动登录? 首先在根目录找到config.sample.inc.php复制一份文件名改为config.inc.php(如果已经存在 config.inc.php 文件,则直 ...

  6. 利用activeX控件在网页里自动登录WIN2003远程桌面并实时控制

    首先要自己配置并打开受控端的WEB远程桌面服务,这个在“添加/删除windows组件”里有,我只在windows 2003 server里试过,没试过XP.下面我们在客户端安装微软提供的远程桌面客户端 ...

  7. 简单的行为控制管理方法,自动登录,session定时验证码过期

    代码很简单 实现的方式很多,用cookies 用static 变量 file文件缓存 等等 比如 //简单行为管理,如果请求此方法次数多于5次,就显示验证码 吧当前方法的name传进来,有效时间是5分 ...

  8. QQ模拟自动登录实现

    QQ模拟自动登录实现 本篇文章主要介绍"QQ模拟自动登录实现(带验证码)",主要涉及到java 实现QQ自动登录(带验证码)方面的内容,对于java 实现QQ自动登录(带验证码)感 ...

  9. java 自动登录代码

    javaBean的代码    package bean;    import java.io.Serializable;    public class Admin implements Serial ...

随机推荐

  1. LeetCode_算法及数据结构覆盖统计

    [输入]共计151道题的算法&数据结构基础数据 (见附录A) [输出-算法]其中有算法记录的共计 97道 ,统计后 结果如下  top3(递归,动态规划,回溯) 递归 动态规划 回溯 BFS ...

  2. Tomcat剖析(二):一个简单的Servlet服务器

    Tomcat剖析(二):一个简单的Servlet服务器 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三) ...

  3. MyEclipse2014 安装SVN小工具

    1.下载svn小工具 下载链接:folderID=2240">http://subclipse.tigris.org/servlets/ProjectDocumentList?fold ...

  4. Oracle 免费的数据库

    Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持 一.Oracle XE 数据库与连接工具安装使用 O ...

  5. c# md5

              还可以加盐,更难以破解 public static string GetMD5(string sDataIn)           {               MD5Crypt ...

  6. [Unity3D]Unity3D连衣裙实现游戏开发系统

    大家好,我是秦培.欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 不知从什么时候開始,国产RPG单机游戏開始出现换装,仙剑系列中第一部实现了换装的 ...

  7. 高德地图教程_poi搜索和显示

    通过高仿深圳的应用近期打算.UI我们已经做了,我见过APP查询界面.关闭网络也将是能够查询其指示数据被存储在数据库中,或者是第一网络,所有网站上的数据是好了.我想简单地使用查询地图提供了. 曾经是接触 ...

  8. Goldeneye.py网站压力测试工具2.1版源码

    Goldeneye压力测试工具的源代码,粗略看了下,代码写的蛮规范和易读的,打算边读边加上了中文注释,但是想来也没太大必要,代码600多行,值得学习的地方还是蛮多的,喜欢Python的同学可以一读 这 ...

  9. 图文解说PhpStorm 7.0版本支持PHP 5.5

    PhpStorm7.0版本终于在2013年与广大开发者见面了!鉴于PhpStorm 7.0测试版中对PHP语言最新版的支持,JetBrains没让大家失望,PhpStorm 7.0正式版本中,最大的变 ...

  10. SQLServer访问Oracle查询性能问题解决

    原文:SQLServer访问Oracle查询性能问题解决 1. 问题 系统有个模块,需要查询Oracle数据库中的数据.目前是通过建立链接服务器实现的. SQLServer访问Oracle实现 可参考 ...