<?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. hdu 4010 Query on The Trees LCT

    支持:1.添加边 x,y2.删边 x,y3.对于路径x,y上的所有节点的值加上w4.询问路径x,y上的所有节点的最大权值 分析:裸的lct...rev忘了清零死循环了两小时... 1:就是link操作 ...

  2. asp.net for itextsharp 操作pdf

    今天分享下昨天做的一个东西 asp.net 的文件 zip 批量下载,首先你需要去 到http://dotnetzip.codeplex.com这个站点下载zip 的包,在里面找到 Ionic.Zip ...

  3. HTML插入SWF

    1.插入透明flash代码 <object classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase=" ...

  4. CSS选择器笔记

    一.元素选择符 序号 选择器 含义 1. * 通用元素选择器,匹配任何元素 2. E 标签选择器,匹配所有使用E标签的元素 3. .info class选择器,匹配所有class属性中包含info的元 ...

  5. css3简易实现图标动画由小到大逐个显现

    在制作网站时避免图片太平淡经常会用到动画效果:由小到大跳跃出现.这种效果很有视觉冲击力,显著提高关注度~ 原理:利用css3的动画属性@keyframes@-moz-keyframes@-webkit ...

  6. .NET DLL 保护措施应用实例(百度云分享工具)

    最近做了个小工具,将保护措施思路全部应用到了此工具中. 点我下载 “百度分享工具”介绍 大家都知道,在百度云盘中分享文件,只能手工一条条地点击“分享”,如果想分享很多文件,操作会非常辛苦.“百度云分享 ...

  7. 第三回 Bootstrap3.x 起步

    基本模版 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="u ...

  8. 七. CSS字体

    概述 所谓字体:即文字的形体结构,根据外观字体分不同的类别:衬线字体Serif.无衬线字体sans-serif和等宽字体monospace.每一个类别的字体又可以分成不同的字体族font family ...

  9. Part 59 to 60 Difference between Convert ToString and ToString,String and StringBuilder

    Part 59 Difference between Convert ToString and ToString Part 60 Difference between String and Strin ...

  10. [老老实实学WCF] 第三篇 在IIS中寄存服务

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...