一、登录

<form action="index.php?m=admin&c=index&a=login&dosubmit=1" method="post" name="myform">
用户名:<input name="username" type="text" class="ipt" value="" /><br />
密码:<input name="password" type="password" class="ipt" value="" /><br />
验证码:<input name="code" type="text" class="ipt ipt_reg" onfocus="document.getElementById('yzm').style.display='block'" />
<img id='code_img' onclick='this.src=this.src+"&"+Math.random()' src='http://localhost/phpcms/api.php?op=checkcode&code_len=4&font_size=20&width=130&height=50&font_color=&background='>
<br />
<a href="javascript:document.getElementById('code_img').src='http://localhost/phpcms/api.php?op=checkcode&m=admin&c=index&a=checkcode&time='+Math.random();void(0);">单击更换验证码</a>
<input name="dosubmit" value="登陆" type="submit" class="login_tj_btn" />
</form>
function login() {
if(isset($_GET['dosubmit'])) { //不为口令卡验证
if (!isset($_GET['card'])) {
$username = isset($_POST['username']) ? trim($_POST['username']) : showmessage(L('nameerror'),HTTP_REFERER);
$code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);
if ($_SESSION['code'] != strtolower($code)) {
$_SESSION['code'] = '';
showmessage(L('code_error'), HTTP_REFERER);
}
} else { //口令卡验证
if (!isset($_SESSION['card_verif']) || $_SESSION['card_verif'] != 1) {
showmessage(L('your_password_card_is_not_validate'), '?m=admin&c=index&a=public_card');
}
$username = $_SESSION['card_username'] ? $_SESSION['card_username'] : showmessage(L('nameerror'),HTTP_REFERER);
} //密码错误剩余重试次数
$this->times_db = pc_base::load_model('times_model');
$rtime = $this->times_db->get_one(array('username'=>$username,'isadmin'=>1));
$maxloginfailedtimes = getcache('common','commons');
$maxloginfailedtimes = (int)$maxloginfailedtimes['maxloginfailedtimes']; if($rtime['times'] >= $maxloginfailedtimes) {
$minute = 60-floor((SYS_TIME-$rtime['logintime'])/60);
if($minute>0) showmessage(L('wait_1_hour',array('minute'=>$minute)));
}
//查询帐号
$r = $this->db->get_one(array('username'=>$username));
if(!$r) showmessage(L('user_not_exist'),'?m=admin&c=index&a=login');
$password = md5(md5(trim((!isset($_GET['card']) ? $_POST['password'] : $_SESSION['card_password']))).$r['encrypt']); if($r['password'] != $password) {
$ip = ip();
if($rtime && $rtime['times'] < $maxloginfailedtimes) {
$times = $maxloginfailedtimes-intval($rtime['times']);
$this->times_db->update(array('ip'=>$ip,'isadmin'=>1,'times'=>'+=1'),array('username'=>$username));
} else {
$this->times_db->delete(array('username'=>$username,'isadmin'=>1));
$this->times_db->insert(array('username'=>$username,'ip'=>$ip,'isadmin'=>1,'logintime'=>SYS_TIME,'times'=>1));
$times = $maxloginfailedtimes;
}
showmessage(L('password_error',array('times'=>$times)),'?m=admin&c=index&a=login',3000);
}
$this->times_db->delete(array('username'=>$username)); //查看是否使用口令卡
if (!isset($_GET['card']) && $r['card'] && pc_base::load_config('system', 'safe_card') == 1) {
$_SESSION['card_username'] = $username;
$_SESSION['card_password'] = $_POST['password'];
header("location:?m=admin&c=index&a=public_card");
exit;
} elseif (isset($_GET['card']) && pc_base::load_config('system', 'safe_card') == 1 && $r['card']) {//对口令卡进行验证
isset($_SESSION['card_username']) ? $_SESSION['card_username'] = '' : '';
isset($_SESSION['card_password']) ? $_SESSION['card_password'] = '' : '';
isset($_SESSION['card_password']) ? $_SESSION['card_verif'] = '' : '';
} $this->db->update(array('lastloginip'=>ip(),'lastlogintime'=>SYS_TIME),array('userid'=>$r['userid']));
$_SESSION['userid'] = $r['userid'];
$_SESSION['roleid'] = $r['roleid'];
$_SESSION['pc_hash'] = random(6,'abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789');
$_SESSION['lock_screen'] = 0;
$default_siteid = self::return_siteid();
$cookie_time = SYS_TIME+86400*30;
if(!$r['lang']) $r['lang'] = 'zh-cn';
param::set_cookie('admin_username',$username,$cookie_time);
param::set_cookie('siteid', $default_siteid,$cookie_time);
param::set_cookie('userid', $r['userid'],$cookie_time);
param::set_cookie('admin_email', $r['email'],$cookie_time);
param::set_cookie('sys_lang', $r['lang'],$cookie_time);
showmessage(L('login_success'),'?m=admin&c=index');
//同步登陆vms,先检查是否启用了vms
$video_setting = getcache('video', 'video');
if ($video_setting['sn'] && $video_setting['skey']) {
$vmsapi = pc_base::load_app_class('ku6api', 'video');
$vmsapi->member_login_vms();
}
} else {
pc_base::load_sys_class('form', '', 0);
include $this->admin_tpl('login');
}
}

二、登出

function public_logout() {
$_SESSION['userid'] = 0;
$_SESSION['roleid'] = 0;
param::set_cookie('admin_username','');
param::set_cookie('userid',0); //退出phpsso
$phpsso_api_url = pc_base::load_config('system', 'phpsso_api_url');
$phpsso_logout = '<script type="text/javascript" src="'.$phpsso_api_url.'/api.php?op=logout" reload="1"></script>'; showmessage(L('logout_success').$phpsso_logout,'?m=admin&c=index&a=login');
}

稍等

1.php代码块的更多相关文章

  1. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  2. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  3. Xcode自定义代码块

    到现在才发现原来Xcode有自定义代码块这么神奇的功能,能简化很多无聊的敲重复代码的工作,真是感叹我怎么才知道!!! 具体的设置流程见:http://nshipster.cn/xcode-snippe ...

  4. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  5. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  6. xcode添加快捷代码块

    添加快捷代码块 在开发过程中,一些常用的代码段,我们可以设置成快捷代码段来快速实现代码的编写. 如上图中的属性的设置,它们都有相同重复的代码@property (nonatomic, strong), ...

  7. java-并发-保护代码块

    浏览以下内容前,请点击并阅读 声明 线程经常需要协调其动作,最常用的协调方法就是保护代码块,该代码块以一个条件判断开始,当判断为true时才能开始执行. 假设一个方法guradedJoy必须等到变量j ...

  8. 匿名对象 构造方法 重载 构造代码块 this 关键字

    一.匿名对象 1.匿名对象 :没有名字对象 2.匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值,无法获取属性值. 2.匿名对象永远都不可能事一个对象. 3.匿名对象的好处 : 书写简单. ...

  9. C#_技巧:计算代码块运行的时间

    System.Diagnostics下类Stopwatch,给程序代码块运行计时, 利用start()和stop()方法来标记代码快. 该命名空间下还有一些其他类,可以对程序进行诊断(diagnosi ...

  10. iOS开发系列--Objective-C之协议、代码块、分类

    概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,这一节将重点介绍ObjC中一些常用的语法特性.当然这些内容虽然和其他高级语言命名不一样,但 ...

随机推荐

  1. python pandas replace函数

    在处理数据的时候,很多时候会遇到批量替换的情况,如果一个一个去修改效率过低,也容易出错.replace()是很好的方法. 1.基本结构: df.replace(to_replace, value) 前 ...

  2. How to get current timestamps in Java

    How to get current timestamps in Java Timestamp timestamp = new Timestamp(System.currentTimeMillis() ...

  3. es6 对象解构 与 参数默认值

    var abc = ({a = 123, b = 321, c = 456} = {}) => console.log(20181109155055, a) abc()

  4. jenkins执行shell命令提示找不到命令解决办法

    用jenkins执行shell脚本,执行一条命令: #唤醒休眠手机 adb shell input keyevent 提示: [adb] $ /bin/sh -xe /Users/xxxxx/tool ...

  5. modelsim编译Xilinx器件库的另一种方法(节省时间)

    以前在用modelsim对Xilinx进行器件库编译时,我用的比较多的是直接在ISE中编译器件库,感觉很方便简单,就是编译时间有点长.自从前段时间,在自己电脑装MathType,360杀毒软件将它视为 ...

  6. 菜鸟学Java(九)——Servlet的基本配置

    学习JavaWeb的人没有不知道Servlet的吧,而要用Servlet就需要在web.xml中进行配置.相信有很多初学者跟我当初一样,对于一些配置参数不是很理解,今天就说说Servlet最基本的配置 ...

  7. 关于casperjs的介绍

    casperjs是一个自动化测试框架,功能强大,也很适合当做爬虫软件使用,casperjs基于phantomjs软件,phantomjs是一个没有界面的浏览器环境,基于python环境 一,安装cas ...

  8. C++对象模型-构造函数语意学

    关于C++,最常听到的一个抱怨就是:编译器背着程序员干了太多的事情. default constructor函数的构建 default constructors会在需要的时候被编译器创建出来,关键字是 ...

  9. 21、uwp UI自动化测试(WinAppDriver)

    使用 UI自动化测试的好处就是在代码逻辑中写好 case 后,来实现 “一劳永逸” 的作用,并且自动化测试能够模拟人工达不到要求,比如快速切换页面.快速点击按钮等,对于提高软件的稳定性很有帮助. 安装 ...

  10. Git 忽略.idea/workspace.xml文件

    在使用idea进行提交代码时,执行提交时一直出现modified:   .idea/workspace.xml 非常让人烦恼. 问题原因: 原因在于Git的忽略,Git在同步代码时,设置本地忽略文件的 ...