<?php
/**
* 通行证服务
*/
class PassportService extends Service { /**
* 验证用户或者管理员是否已登录
* @return boolean
*/
public function isLogged($admin=false){
//$_cookie_user=cookie('LOGGED_USER');
$_session_username = $_SESSION[C('COOKIE_PREFIX').'username'];
$_session_uid = $_SESSION[C('COOKIE_PREFIX').'uid'];
$_session_isadmin = intval($_SESSION[C('COOKIE_PREFIX').'isadmin']);
// 验证本地系统登录
if ($_session_user || $_session_uid){
if(!$admin){
return true;
}
elseif($admin&&$_session_isadmin==1){
return true;
}
else{
return false;
}
}else{
return false;
}
}
//验证登录提交参数
public function doLogin($username,$password){
if(empty($username) || empty($password)){
return false;
}
//$username=addcslashes($username); $password=md5($password);
$map=array();
$map['username']=$username;
$map['password']=$password;
$uid=M("user")->where($map)->getField('uid'); // $password=md5($password);
//$uid=M("user")->where("username='{$username}' and password='{$password}'")->getField('uid');
if(!$uid){
return false;
}
else{
return $this->online($uid);
}
}
//写入cookie和session
public function online($uid){
$uid=intval($uid);
if($uid<=0){
return false;
}
else{
$user=M("user")->where("uid={$uid}")->field('uid,username,isadmin')->find();
if(!$user){
return false;
}else{
header("P3P: CP=.");
cookie('LOGGED_USER',$user['username']);
$_SESSION[C('COOKIE_PREFIX').'username'] = $user['username'];
$_SESSION[C('COOKIE_PREFIX').'uid'] = $user['uid'];
$_SESSION[C('COOKIE_PREFIX').'isadmin'] = $user['isadmin'];
$this->recordLogin($user['uid']);
return true;
}
}
} /**
* 注销本地登录
* @return void
*/
public function logoutLocal() {
//注销session
unset($_SESSION[C('COOKIE_PREFIX').'username']);
unset($_SESSION[C('COOKIE_PREFIX').'uid']);
unset($_SESSION[C('COOKIE_PREFIX').'isadmin']);
//注销cookie
cookie('LOGGED_USER',NULL); } /**
* 登录记录
*
* @param int $uid 用户ID
*/
public function recordLogin($uid) {
$login['uid'] = $uid;
$login['ip'] = get_client_ip();
$login['place'] = convert_ip($login['ip']);
$login['ctime'] = time();
M('login_record')->add($login);
} /* 后台管理相关方法 */ // 运行服务,系统服务自动运行
public function run(){
return;
} //启动服务,未编码
public function _start(){
return true;
} //停止服务,未编码
public function _stop(){
return true;
} //卸载服务,未编码
public function _install(){
return true;
} //卸载服务,未编码
public function _uninstall(){
return true;
}
}
?>

thinkphp通行证服务,验证登录,注销登录的更多相关文章

  1. MVC5 网站开发之六 管理员 1、登录、验证和注销

    上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录.验证和注销功能. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MV ...

  2. 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)

    前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...

  3. SSM 拦截器验证权限和登录与注销的实现

    拦截器的作用在于,比如我们输入 xxx.com/admin 发起请求进入 网站后台或者其他后台页面.我们的拦截器会在 Controller  调用之前进行拦截,至于什么拦截,由我们来写.比如,判断用户 ...

  4. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

  5. User Profile Service服务未能登录,无法登录

    不知你是否遇到这样的问题,某一天你打开PC,开机正常,可当你输入正确的密码回车,却发现Vista或Win7拒绝让你登录,提示"User Profile Service 服务未能登录.无法加载 ...

  6. python测试开发django-43.session机制(登录/注销)

    前言 当我们登录访问一个网站时,服务器需要识别到你已经登录了,才有相应的权限访问登录之后的页面.用户退出登录后,将无权限访问再访问登录后的页面. 从登录到退出的一整个流程,可以看成是与服务器的一次会话 ...

  7. openfire Android学习---android客户端聊天开发之登录 和 注销登录

    一切就绪,新建一个android测试工程: 上网权限配置,界面绘制啥的,这里就不说了. 首先 导入一个smark包.这个是用来维护长连接的,也可以是asmark.我用的是asmark 先普及一些基本知 ...

  8. ThInkPHP加密和解密cookie(登录操作)

    摘自:http://www.thinkphp.cn/code/1794.html 通过加密cookie是网站安全性更高,登录信息不保存在session中在function.php文件在建立两个函数,加 ...

  9. Linux(七)开机,重启和用户登录注销

    7.1 关机&重启命令 基本介绍: shutdown -h now       立刻进行关机 shutdown -h 1            1分钟后关机 shutdown -r now  ...

随机推荐

  1. 在centos7中添加一个新用户并授权

    参考地址:http://www.cnblogs.com/woshimrf/p/5906084.html 创建新用户 创建一个用户名为:zhangbiao [root@localhost ~]# add ...

  2. Java作业

    1.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty和Staff.具体要求如下: (1)Person类中的属性有:姓名name(String类型),地址 ...

  3. html+css--水平居中总结(不定宽块状元素方法)(一)

    来源:http://www.imooc.com/code/6363 在实际工作中我们会遇到需要为“不定宽度的块状元素”设置居中,比如网页上的分页导航,因为分页的数量是不确定的,所以我们不能通过设置宽度 ...

  4. shell--学习 sed

    sed:数据流编辑器 读一行到内存处理一行然后输出一行. 模式空间: sed:默认不编辑源文件 sed [option]    ADDRESSCOMMAND   file 1.起始行. 结束行 sed ...

  5. .NET DLL 保护措施应用实例(百度云批量保存工具)

    最近做了个小工具,将保护措施思路全部应用到了此工具中. 点我下载   百度云批量保存工具是一款专门用于自动批量保存百度云分享的软件. 本软件特点:1:完全模拟人工操作:2:可以批量保存百度分享的文件( ...

  6. 【转】用java实例学习MVC模式

    .1 MVC模式 MVC是三个单词的缩写,这三个单词分别为:模型(Model).视图(View)和控制(Controller).MVC模式的目的就是实现Web系统的职能分工.下面以J2EE开发进行介绍 ...

  7. Microsoft SQL2000 错误代码 (@@error)

    Microsoft SQL 2000 错误代码(@@error) 0 操作成功完成.  1 功能错误.  2 系统找不到指定的文件.  3 系统找不到指定的路径.  4 系统无法打开文件.  5 拒绝 ...

  8. 64位Windows7升级IE11后无法启动的解决办法

    1.控制面板\网络和 Internet\Internet选项 2.在高级选项卡的“安全”组配置

  9. Linux中RM快速删除大量文件/文件夹方法

    昨天遇到一个问题,在Linux中有一个文件夹里面含有大量的Cache文件(夹),数量级可能在百万级别,使用rm -rf ./* 删除时间慢到不可接受.Google了一下,查到了一种方法,试用了下确实比 ...

  10. 使用vhd灌装系统——测试系统专用

    需要使用工具imagex.exe 一. 创建虚拟磁盘: 1.diskpart 2.create vdisk file=c:\test\leiyue.vhd maximum=20000 [tpye=ex ...