网页上经常有一些自动登录的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. clearfix:after 清除css浮动

    在写HTML代码的时候,发现在Firefox等符合W3C标准的浏览器中,如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有clear,导致不能被撑开.看 ...

  2. C语言星号的秘密

    C语言星号的秘密 星号的秘密 1.乘法运算符   2.定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int ...

  3. Linux_修改创建文件夹时默认权限(修改为能上传)

    1:查看当前权限 umask 0022 意思就是权限为:777-022 =755 读 2:临时修改 umask 020 020 意思为:777-020=757 读写上传 3:永久修改 回到根目录 cd ...

  4. PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

    <?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo &q ...

  5. 数据持久化之SP的优化—送工具类

    第一点:sp存储的是键值对 getSharedPreferences 第一个參数是你保存文件的名字,第个是保存的模式一般能够默觉得0 先看普通 使用SP 存储String类型字符串吧 SharedPr ...

  6. Redhat Enterprise server 6.3 构造VPN

    一.软体 dkms.kernel_ppp_mppe.pptpd 二.下载软件 wget http://sourceforge.net/projects/poptop/files/mppe%20modu ...

  7. ArcGIS Runtime SDKs v10.2.4最新(Android、iOS、OSX和.NET)

    ArcGIS Runtime SDKs v10.2.4最新,它包含:Android.iOS.OS X和.NET四大平台,用户和开发人员可以登录Esri最新的SDK安装包.或者通过云盘下载(http:/ ...

  8. What is HHVM?

    What is HHVM? HHVM is an open-source virtual machine designed for executing programs written in Hack ...

  9. 轻型ORM--Dapper

    分享一个轻型ORM--Dapper选用理由 推荐理由:Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快:) Google Code下载地址 ...

  10. 【剑指offer】员工年龄排序

    典型的以空间换时间问题,思路非常重要! /* 员工年龄排序 员工可能有几万名,要求时间复杂度为O(n) 思路:员工的年龄必定在一个范围内,比方0-99,那么我们建立一个大小为100的辅助数组,然后遍历 ...