PublicAction.class.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Fanwe 方维直播系统
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: 云淡风轻(1956838968@qq.com)
  8. // +----------------------------------------------------------------------
  9. //开放的公共类,不需RABC验证
  10. class PublicAction extends BaseAction{
  11. public function login()
  12. {
  13. //验证是否已登录
  14. //管理员的SESSION
  15. $adm_session = es_session::get(md5(conf("AUTH_KEY")));
  16. $adm_name = $adm_session['adm_name'];
  17. $adm_id = intval($adm_session['adm_id']);
  18. if(intval(app_conf('EXPIRED_TIME'))>0&&$adm_id!=0){
  19. $admin_logined_time = intval($adm_session['admin_logined_time']);
  20. $max_time = intval(conf('EXPIRED_TIME'))*60;
  21. if(NOW_TIME-$admin_logined_time>=$max_time)
  22. {
  23. es_session::delete((md5(conf("AUTH_KEY"))));
  24. $this->display();
  25. }
  26. }
  27. if($adm_id != 0)
  28. {
  29. //已登录
  30. $this->redirect(u("Index/index"));
  31. }
  32. else
  33. {
  34. $m_config = load_auto_cache("m_config");
  35. $account_mobile = (trim($m_config['account_mobile']));
  36. $this->assign('account_mobile',hideMobile($account_mobile));
  37. $open_check_account = intval(OPEN_CHECK_ACCOUNT);
  38. $check_ip_info = $this->check_account_ip(1);
  39. if(trim($m_config['account_mobile'])==''||$check_ip_info['status']==1){
  40. $open_check_account = 0;
  41. }
  42. $this->assign('open_check_account', $open_check_account);
  43. $this->display();
  44. }
  45. }
  46. public function verify()
  47. {
  48. Image::buildImageVerify(4,1);
  49. }
  50. //登录函数
  51. public function do_login()
  52. {
  53. $adm_name = trim($_REQUEST['adm_name']);
  54. $adm_password = trim($_REQUEST['adm_password']);
  55. $ajax = intval($_REQUEST['ajax']); //是否ajax提交
  56. if($adm_name == '')
  57. {
  58. $this->error(L('ADM_NAME_EMPTY',$ajax));
  59. }
  60. if($adm_password == '')
  61. {
  62. $this->error(L('ADM_PASSWORD_EMPTY',$ajax));
  63. }
  64. if(es_session::get("verify") != md5($_REQUEST['adm_verify'])) {
  65. $this->error(L('ADM_VERIFY_ERROR'),$ajax);
  66. }
  67. //检查手机验证码
  68. $m_config = load_auto_cache("m_config");
  69. $open_check_account = intval(OPEN_CHECK_ACCOUNT);
  70. $check_ip_info = $this->check_account_ip(1);
  71. if(trim($m_config['account_mobile'])==''||$check_ip_info['status']==1){
  72. $open_check_account = 0;
  73. }
  74. if($open_check_account)
  75. {
  76. $verify_code = trim($_REQUEST['mobile_verify']);
  77. $account_mobile = trim($m_config['account_mobile']);
  78. if($GLOBALS['db']->getOne("SELECT count(*) FROM ".DB_PREFIX."mobile_verify_code WHERE mobile=".$account_mobile." AND verify_code='".$verify_code."'")==0){
  79. $this->error('手机验证码出错',$ajax);
  80. }
  81. }
  82. $condition['adm_name'] = $adm_name;
  83. $condition['is_effect'] = 1;
  84. $condition['is_delete'] = 0;
  85. $adm_data = M("Admin")->where($condition)->find();
  86. if($adm_data) //有用户名的用户
  87. {
  88. if($adm_data['adm_password']!=md5($adm_password))
  89. {
  90. save_log($adm_name.L("ADM_PASSWORD_ERROR"),0); //记录密码登录错误的LOG
  91. $this->error(L("ADM_PASSWORD_ERROR"),$ajax);
  92. }
  93. else
  94. {
  95. //登录成功
  96. $adm_session['adm_name'] = $adm_data['adm_name'];
  97. $adm_session['adm_id'] = $adm_data['id'];
  98. $adm_session['role_id'] = $adm_data['role_id'];
  99. $adm_session['admin_logined_time'] = NOW_TIME;
  100. if(trim($_REQUEST['adm_dog_key'])){
  101. $adm_session['adm_dog_key'] = trim($_REQUEST['adm_dog_key']);
  102. }
  103. es_session::set(md5(conf("AUTH_KEY")),$adm_session);
  104. //es_session::set("user_logined_time",NOW_TIME);
  105. //重新保存记录
  106. $adm_data['login_ip'] = get_client_ip();
  107. $adm_data['login_time'] = get_gmtime();
  108. M("Admin")->save($adm_data);
  109. save_log($adm_data['adm_name'].L("LOGIN_SUCCESS"),1);
  110. $this->success(L("LOGIN_SUCCESS"),$ajax);
  111. }
  112. }
  113. else
  114. {
  115. save_log($adm_name.L("ADM_NAME_ERROR"),0); //记录用户名登录错误的LOG
  116. $this->error(L("ADM_NAME_ERROR"),$ajax);
  117. }
  118. }
  119. //登出函数
  120. public function do_loginout()
  121. {
  122. //验证是否已登录
  123. //管理员的SESSION
  124. $adm_session = es_session::get(md5(conf("AUTH_KEY")));
  125. $adm_id = intval($adm_session['adm_id']);
  126. if($adm_id == 0)
  127. {
  128. //已登录
  129. $this->redirect(u("Public/login"));
  130. }
  131. else
  132. {
  133. es_session::delete(md5(conf("AUTH_KEY")));
  134. $this->assign("jumpUrl",U("Public/login"));
  135. $this->assign("waitSecond",3);
  136. $this->success(L("LOGINOUT_SUCCESS"));
  137. }
  138. }
  139. //检查登录账号
  140. public function check_account(){
  141. $result = array('status'=>0,'error'=>'');
  142. $adm_name = trim($_REQUEST['adm_name']);
  143. $adm_password = trim($_REQUEST['adm_password']);
  144. if($adm_name == '')
  145. {
  146. $result['error'] = L('ADM_NAME_EMPTY');
  147. admin_ajax_return($result);
  148. }
  149. if($adm_password == '')
  150. {
  151. $result['error'] = L('ADM_PASSWORD_EMPTY');
  152. admin_ajax_return($result);
  153. }
  154. $condition['adm_name'] = $adm_name;
  155. $condition['is_effect'] = 1;
  156. $condition['is_delete'] = 0;
  157. $adm_data = M("Admin")->where($condition)->find();
  158. if($adm_data) //有用户名的用户
  159. {
  160. if($adm_data['adm_password']!=md5($adm_password))
  161. {
  162. $result['error'] = L('ADM_PASSWORD_ERROR');
  163. admin_ajax_return($result);
  164. }
  165. else
  166. {
  167. $result['status'] =1;
  168. admin_ajax_return($result);
  169. }
  170. }
  171. else
  172. {
  173. $result['error'] = L('ADM_NAME_ERROR');
  174. admin_ajax_return($result);
  175. }
  176. }
  177. //检查登录IP
  178. public function check_account_ip($type=0)
  179. {
  180. $result = array('status'=>0,'error'=>'');
  181. $m_config = load_auto_cache("m_config");
  182. $ip = get_client_ip();
  183. //备用域名 列表
  184. $account_ip = array();
  185. $account_ip_arr = explode("<br />",nl2br($m_config['account_ip']));
  186. foreach($account_ip_arr as $k=>$v){
  187. $v = ltrim(rtrim(trim($v)));
  188. if($v!=''){
  189. $account_ip[]=$v;
  190. }
  191. }
  192. if(in_array($ip,$account_ip)&&count($m_config['account_ip'])>0){
  193. $result['status'] = 1;
  194. }
  195. if(intval($type)==0){
  196. admin_ajax_return($result);
  197. }else{
  198. return $result;
  199. }
  200. }
  201. //发送短信
  202. public function send_account_verify()
  203. {
  204. $result = array('status'=>0,'error'=>'');
  205. $m_config = load_auto_cache("m_config");
  206. $mobile = addslashes(htmlspecialchars(trim($m_config['account_mobile'])));
  207. if(app_conf("SMS_ON")==0)
  208. {
  209. $result['status'] = 0;
  210. $result['error'] = "短信未开启";
  211. admin_ajax_return($result);
  212. }
  213. //添加:手机发送 防护
  214. $result = check_sms_send($mobile);
  215. if ($result['status'] == 0){
  216. $result['time'] = 0;
  217. admin_ajax_return($result);
  218. }
  219. if($GLOBALS['db']->getOne("select count(*) from ".DB_PREFIX."mobile_verify_code where mobile = '".$mobile."' and client_ip='".get_client_ip()."' and create_time>=".(get_gmtime()-60)." ORDER BY id DESC") > 0)
  220. {
  221. $result['status'] = 0;
  222. $result['error'] = "发送速度太快了";
  223. admin_ajax_return($result);
  224. }
  225. $n_time=get_gmtime()-300;
  226. //删除超过5分钟的验证码
  227. $GLOBALS['db']->query("DELETE FROM ".DB_PREFIX."mobile_verify_code WHERE create_time <=".$n_time);
  228. //开始生成手机验证
  229. $code = rand(1000,9999);
  230. $GLOBALS['db']->autoExecute(DB_PREFIX."mobile_verify_code",array("verify_code"=>$code,"mobile"=>$mobile,"create_time"=>get_gmtime(),"client_ip"=>get_client_ip()),"INSERT");
  231. send_verify_sms($mobile,$code);
  232. $status = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."deal_msg_list where dest = '".$mobile."' and code='".$code."'");
  233. if($status['is_success']){
  234. $result['status'] = 1;
  235. $result['time'] = 60;
  236. $result['error'] = $status['title'].$status['result'];
  237. }else{
  238. $result['status'] = 0;
  239. $result['time'] = 0;
  240. $result['error'] = "短信验证码发送失败";
  241. }
  242. admin_ajax_return($result);
  243. }
  244. }
  245. ?>