login.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. class login_c extends Control
  3. {
  4. function __construct()
  5. {
  6. parent::Control();
  7. $this->load_model("admin");
  8. }
  9. //兼容PHP4的写法
  10. function login_c()
  11. {
  12. $this->__construct();
  13. }
  14. //登录页面板
  15. function index_f()
  16. {
  17. $this->tpl->p('login');
  18. }
  19. //登录操作
  20. function login_ok_f()
  21. {
  22. $login_name = $this->trans_lib->safe("username");
  23. $login_pass = $this->trans_lib->safe("password");
  24. if(!$login_name || !$login_pass)
  25. {
  26. error($this->lang["login_not_user_pass"],$this->url("login"));
  27. }
  28. //判断是否需要用验证码
  29. if(function_exists("imagecreate") && defined("SYS_VCODE_USE") && SYS_VCODE_USE == true)
  30. {
  31. $chk = $this->trans_lib->safe("chk");
  32. if(!$chk)
  33. {
  34. error($this->lang["login_vcode_empty"],$this->url("login"));
  35. }
  36. $chk = md5($chk);
  37. if($chk != $_SESSION[SYS_VCODE_VAR])
  38. {
  39. error($this->lang["login_vcode_false"],$this->url("login"));
  40. }
  41. unset($_SESSION[SYS_VCODE_VAR]);
  42. }
  43. //判断账号或密码是否正确
  44. $rs = $this->admin_m->check_login($login_name,$login_pass);
  45. if(!$rs)
  46. {
  47. error($this->lang["login_false"],$this->url("login"));
  48. }
  49. else
  50. {
  51. //非系统管理员,登录时同时判断语言包权限
  52. if(!$rs["if_system"] && !$rs["langid"])
  53. {
  54. error("当前账号尚未配置相应的语言权限",$this->url("login"));
  55. }
  56. //加载语言包
  57. $this->load_model("lang");
  58. $rs_langid = $rs["if_system"] ? "" : $rs["langid"];
  59. $chk_admin = $this->lang_m->get_list_chk($rs_langid);
  60. if(!$chk_admin)
  61. {
  62. error("当前账号没有找到符合要求的内容管理权限",$this->url("login"));
  63. }
  64. //取得第一个语言ID做为默认语言
  65. $_SESSION["sys_lang_id"] = $chk_admin[0]["langid"];
  66. $_SESSION["admin_id"] = $rs["id"];
  67. $_SESSION["admin_name"] = $rs["name"];
  68. $_SESSION["admin_realname"] = $rs["realname"] ? $rs["realname"] : $rs["name"];
  69. $_SESSION[SYS_CHECKED_SESSION_ID] = sys_md5($rs);
  70. $login_success = sys_eval($this->lang["login_success"],$rs["name"]);//格式化模板标签中的变量
  71. error($login_success,$this->url("index"));
  72. }
  73. }
  74. //退出操作
  75. function logout_f()
  76. {
  77. $my_realname = $_SESSION["admin_realname"];
  78. unset($_SESSION["admin_id"],$_SESSION[SYS_CHECKED_SESSION_ID],$_SESSION["admin_realname"],$_SESSION["admin_name"]);
  79. $logout_success = sys_eval($this->lang["logout_success"],$my_realname);
  80. error($logout_success,$this->url("login"));
  81. }
  82. //创建验证码
  83. function codes_f()
  84. {
  85. $x_size=76;
  86. $y_size=23;
  87. if(!defined("SYS_VCODE_VAR"))
  88. {
  89. define("SYS_VCODE_VAR","phpok_login_chk");
  90. }
  91. $aimg = imagecreate($x_size,$y_size);
  92. $back = imagecolorallocate($aimg, 255, 255, 255);
  93. $border = imagecolorallocate($aimg, 0, 0, 0);
  94. imagefilledrectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $back);
  95. $txt="0123456789";
  96. $txtlen=strlen($txt);
  97. $thetxt="";
  98. for($i=0;$i<4;$i++)
  99. {
  100. $randnum=mt_rand(0,$txtlen-1);
  101. $randang=mt_rand(-10,10); //文字旋转角度
  102. $rndtxt=substr($txt,$randnum,1);
  103. $thetxt.=$rndtxt;
  104. $rndx=mt_rand(1,5);
  105. $rndy=mt_rand(1,4);
  106. $colornum1=($rndx*$rndx*$randnum)%255;
  107. $colornum2=($rndy*$rndy*$randnum)%255;
  108. $colornum3=($rndx*$rndy*$randnum)%255;
  109. $newcolor=imagecolorallocate($aimg, $colornum1, $colornum2, $colornum3);
  110. imageString($aimg,3,$rndx+$i*21,5+$rndy,$rndtxt,$newcolor);
  111. }
  112. unset($txt);
  113. $thetxt = strtolower($thetxt);
  114. $_SESSION[SYS_VCODE_VAR] = md5($thetxt);#[写入session中]
  115. @session_write_close();#[关闭session写入]
  116. imagerectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $border);
  117. $newcolor="";
  118. $newx="";
  119. $newy="";
  120. $pxsum=30; //干扰像素个数
  121. for($i=0;$i<$pxsum;$i++)
  122. {
  123. $newcolor=imagecolorallocate($aimg, mt_rand(0,254), mt_rand(0,254), mt_rand(0,254));
  124. imagesetpixel($aimg,mt_rand(0,$x_size-1),mt_rand(0,$y_size-1),$newcolor);
  125. }
  126. header("Pragma:no-cache");
  127. header("Cache-control:no-cache");
  128. header("Content-type: image/png");
  129. imagepng($aimg);
  130. imagedestroy($aimg);
  131. exit;
  132. }
  133. }
  134. ?>