首頁  >  文章  >  後端開發  >  php寫的一個登入驗證類

php寫的一個登入驗證類

WBOY
WBOY原創
2016-07-25 09:04:24827瀏覽
  1. 最終類別 UserLogin {

  2. public function __construct() {

  3. }
  4. public static function getUserInfo() {
  5. if (isset($_COOKIE["user_id"])&&$_COOKIE["user_id"]&&(trim( $_COOKIE["user_id"])! ="")) {
  6. if (isset($_SESSION["USER_INFO"]))
  7. return $_SESSION["USER_INFO"];
  8. $dao = new UserDao(); $user = $dao->find($_COOKIE["user_id"]);
  9. if ($user) {
  10. $_SESSION["USER_INFO"] = $user;
  11. setcookie("docloud_sid", session_id( ), time() + 36000);
  12. setcookie("user_id", $_COOKIE["user_id"], time() + 36000);
  13. if (array_key_exists(""selected_prj_ygOOK" )
  14. setcookie("selected_prj_id", $_COOKIE["selected_prj_id"], time() + 36000);
  15. if (array_key_exists("selected_class_ookie", $lected_class_p)(clected_class_p), ", $_COOKIE["selected_class_id"], time() + 36000);
  16. if (array_key_exists("selected_image_id", $_COOKIE))
  17. setcookieage(selected_image( ], time() + 36000);
  18. if (array_key_exists("test_image_ids", $_COOKIE))
  19. setcookie("test_image_ids", $_COOKIE))
  20. setcookie("test_image_ids", $_COOKIE[" test_image_idookies" ;
  21. if (array_key_exists("upload_image_ids", $_COOKIE))
  22. setcookie("upload_image_ids", $_COOKIE["upload_image_ids"], time(0) + 36000);
  23. }
  24. }
  25. self::clearCookie();
  26. return null;
  27. }
  28. public static function setUserInfo($userInfo) {

  29. public static function setUserInfo($userInfo) {

  30. $_SESSION["USER_INFO"] = $userInfo;
  31. setcookie("docloud_sid", session_id(), time() + 36000);
  32. setcookie("user_id ", $userInfo->getId(),time( ) + 36000);
  33. }
  34. public static function isLogin() {

  35. if (self::getUserInfo()) {
  36. return true;
  37. }
  38. return false;
  39. }
  40. 公用靜態函式delUserInfo() {
  41. self::clearCookie();
  42. session_destroy();
  43. }
  44. }
  45. }
  46. }
  47. }
  48. }
  49. }
  50. }
  51. }
  52. }
  53. 私有靜態函式clearCookie() {
  54. setcookie("docloud_sid", "", time() - 36000);
  55. setcookie("user_id", "", time() - 36000);
  56. setcookie("selected_prj_id", "", time() - 36000);
  57. setcookie("selected_class_id", "", time() - 36000);
  58. setcookie("selected_image_time" ) - 36000);
  59. setcookie("test_image_ids", "", time( ) - 36000);
  60. setcookie("upload_image_ids", "", time() - 36000);
  61. }
  62. /**

  63. * 登入驗證器。
  64. */
  65. final class LoginValidator {
  66. private function __construct() {
  67. }
  68. / **

  69. * 驗證給定的使用者名稱和密碼。
  70. * @param $username 和 $password 進行驗證
  71. * @return array {@link Error} s 陣列
  72. */
  73. public static function validate($username, $password) {
  74. $errors = array();
  75. $username = trim($username);
  76. if ( ! $username) {
  77. $errors[] = new Error('username', '使用者名稱不能為空。');
  78. } elseif (strlen($username) $error[ ] = new Error('使用者名稱', '使用者名稱長度不能小於3個字元。');
  79. } elseif (strlen($username)>30) { $errors[] = new Error('使用者名稱', '使用者名稱長度不能超過30個字元。 )) { $errors[] = new Error('用戶名', '用戶名必須以字母開頭。'); } elseif (!preg_match('/^[A-Za-z0-9_ ]+ $/', $username)) { $errors[] = new Error('username', '使用者名稱只能是字母、數字以及底線( _ )的組合。'); } elseif ( !trim($password)) { $errors[] = new Error('password', '密碼不能為空。');
  80. } else {
  81. // 檢查use 是否存在
  82. $dao = new UserDao();
  83. $user = $dao->findByName($username);
  84. if ($user) {

  85. if (!($user->getPassword() == sha1($user->getSalt() . $password))) {
  86. $errors[] = 新錯誤('密碼', '使用者名稱或密碼錯誤。');
  87. }
  88. } else {
  89. $errors[] = new Error('使用者名稱', '使用者名稱不存在。 ');
  90. }
  91. }
  92. return $errors;
  93. }
  94. }
  95. /**

  96. * 驗證錯誤。
  97. */
  98. 最終類別錯誤{
  99. 私人$source;
  100. 私人$message;
  101. /**

  102. * 建立新錯誤。
  103. * @param mix $source 錯誤來源
  104. * @param string $message 錯誤訊息
  105. */
  106. function __construct($source, $message) {
  107. $ this->source = $source;
  108. $this->message = $message;
  109. }
  110. /**

  111. * 取得錯誤來源。
  112. * @return 錯誤的混合來源
  113. */
  114. public function getSource() {
  115. return $this->source;
  116. }
  117. /**

  118. * 取得錯誤訊息。
  119. * @return 字串錯誤訊息
  120. */
  121. public function getMessage() {
  122. return $this-> message;
  123. }
  124. }
  125. //如果登錄,註銷頁面的跳轉類在http://www.cnblogs.com/setsail/archive/2012/12/ 18/2823231.html裡這裡不再重複重寫

  126. if (UserLogin::isLogin( ) && $_COOKIE["user_id"]==1) {
  127. UserLogin::delUserInfo();
  128. } elseif (UserLogin::isLogin()){
  129. Utils::redirect('歡迎') ;
  130. }
  131. $使用者名稱= null;

  132. $密碼= null ;
  133. $msg = "";
  134. $ username = addslashes(trim(stripslashes($_POST ['使用者名稱'])));

  135. $password = addslashes(trim(stripslashes($_POST ['password'])));
  136. // 驗證
  137. $errors = LoginValidator::validate($username, $password);
  138. if (empty($errors)) {
  139. // 儲存
  140. $dao = new UserDao();
  141. $user = $dao->findByName($username);
  142. $last_login_ip = Utils::getIpAddress();
  143. $user->setLastLoginIp($last_login_ip);
  144. $now = new DateTime( );
  145. $user->setLastLoginTime($now);
  146. $dao->save($user);
  147. UserLogin::setUserInfo($user);
  148. Flash::addFlash('登入! ');
  149. Utils::redirect('歡迎') ;
  150. }
  151. foreach ($errors as $e) {
  152. $msg .= $e->getMessage(). "
    ";
  153. }
  154. }
  155. ?>
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn