ホームページ  >  記事  >  バックエンド開発  >  PHPで書かれたログイン検証クラス

PHPで書かれたログイン検証クラス

WBOY
WBOYオリジナル
2016-07-25 09:04:24829ブラウズ
  1. final class UserLogin {

  2. パブリック関数 __construct() {

  3. }
  4. パブリック静的関数 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();
  9. $user = $dao->find ($_COOKIE["user_id"]);
  10. if ($user) {
  11. $_SESSION["USER_INFO"] = $user;
  12. setcookie("docloud_sid", session_id(), time() + 36000);
  13. setcookie( "user_id", $_COOKIE["user_id"], time() + 36000);
  14. if (array_key_exists("selected_prj_id", $_COOKIE))
  15. setcookie("selected_prj_id", $_COOKIE["selected_prj_id"], time( ) + 36000);
  16. if (array_key_exists("selected_class_id", $_COOKIE))
  17. setcookie("selected_class_id", $_COOKIE["selected_class_id"], time() + 36000);
  18. if (array_key_exists("selected_image_id") , $_COOKIE))
  19. setcookie("selected_image_id", $_COOKIE["selected_image_id"], time() + 36000);
  20. if (array_key_exists("test_image_ids", $_COOKIE))
  21. setcookie("test_image_ids", $_COOKIE ["test_image_ids"], time() + 36000);
  22. if (array_key_exists("upload_image_ids", $_COOKIE))
  23. setcookie("upload_image_ids", $_COOKIE["upload_image_ids"], time() + 36000);
  24. return $user;
  25. }
  26. }
  27. self::clearCookie();
  28. return null;
  29. }

  30. public static function setUserInfo($userInfo) {

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

  35. public static function isLogin() {

  36. if (self::getUserInfo()) {
  37. return true;
  38. }
  39. return false;
  40. }

  41. パブリック静的関数 delUserInfo() {

  42. self::clearCookie();
  43. session_destroy();
  44. }
  45. プライベート静的関数 clearCookie() {
  46. setcookie("docloud_sid", "", time() - 36000);
  47. setcookie ("user_id", "", time() - 36000);
  48. setcookie("selected_prj_id", "", time() - 36000);
  49. setcookie("selected_class_id", "", time() - 36000);
  50. setcookie("selected_image_id", "", time() - 36000);
  51. setcookie("test_image_ids", "", time() - 36000);
  52. setcookie("upload_image_ids", "", time() - 36000);
  53. }
  54. }

  55. /**

  56. * ログイン用のバリデータ
  57. */
  58. final class LoginValidator {
  59. プライベート関数 __construct() {
  60. }

  61. /**

  62. * 指定されたユーザー名とパスワードを検証します。
  63. * @param $username と $password を検証します
  64. * @return array array of {@link Error} s
  65. */
  66. public static function validate($username, $password) {
  67. $errors = array();
  68. $username = トリム($username);
  69. if (!$username) {
  70. $errors [] = new Error('username', '用人名は空にはできません。');
  71. } elseif (strlen($username)<3) {
  72. $errors[] = new Error('username', '用人名');
  73. } elseif (strlen($username)>30) {
  74. $errors[] = new Error('username', 'ユーザー名の長さは 30 文字を超えることはできません。');
  75. } elseif (!preg_match('/^[A-Za-z]+$/',substr($username, 0, 1))) {
  76. $errors[] = new Error('username', '用户名');
  77. } elseif (!preg_match('/^[A-Za-z0-9_]+$/', $username)) {
  78. $errors[] = new Error('username', 'ユーザー名は文字、数字、および下線( _ ) の組み合わせのみ可能です。');
  79. } elseif (!trim($password)) {
  80. $errors[] = new Error('password', '秘密コードは空にすることはできません。');
  81. } else {
  82. // use が存在するかどうかを確認します
  83. $dao = new UserDao();
  84. $user = $dao->findByName($username);

  85. if ($user) {

  86. if (!($user->getPassword() == sha1($user->getSalt() . $password))) {
  87. $errors[] = new Error('パスワード' , '用人名または秘密暗号错误。');
  88. }
  89. } else {
  90. $errors[] = new Error('ユーザー名', '用户名は存在しません。');
  91. }
  92. }
  93. return $errors;
  94. }
  95. }

  96. /**

  97. * 検証エラー
  98. */
  99. final クラス エラー {
  100. private $source;
  101. private $message;

  102. /**

  103. * 新しいエラーを作成します。
  104. * @parammixed $source エラーのソース
  105. * @param string $message エラーメッセージ
  106. */
  107. function __construct($source, $message) {
  108. $this->source = $source;
  109. $this->message = $message;
  110. }

  111. < ;p> /**
  112. * エラーのソースを取得します。
  113. * @return エラーの混合ソースを返します
  114. */
  115. public function getSource() {
  116. return $this->source;
  117. }

  118. /**

  119. * エラーメッセージを取得します。
  120. * @return string エラーメッセージ
  121. */
  122. public function getMessage() {
  123. return $this->message;
  124. }
  125. }

  126. // ログインしている場合はログアウトします 页面的跳转类http://www.cnblogs.com/setsail/archive/2012/12/18/2823231.html 里这里不再重复书写

  127. if (UserLogin::isLogin() && $_COOKIE["user_id"]==1 ) {
  128. U​​serLogin::delUserInfo();
  129. }elseif (UserLogin::isLogin()){
  130. Utils::redirect('welcome');
  131. }

  132. $username = null;

  133. $password = null;
  134. $msg = "";

  135. if (isset($_POST['username']) && isset($_POST['password'])) {

  136. $ username = addedlashes(trim(stripslashes($_POST ['username'])));
  137. $password =addslashes(trim(stripslashes($_POST ['password'])));
  138. // validate
  139. $errors = LoginValidator: :validate($username, $password);
  140. if (empty($errors)) {
  141. // save
  142. $dao = new UserDao();
  143. $user = $dao->findByName($username);
  144. $last_login_ip = Utils::getIpAddress();
  145. $user->setLastLoginIp($last_login_ip);
  146. $now = new DateTime();
  147. $user->setLastLoginTime($now);
  148. $dao->save ($user);
  149. UserLogin::setUserInfo($user);
  150. Flash::addFlash('登录成功!');
  151. Utils::redirect('welcome');
  152. }
  153. foreach ($errors as $e ) {
  154. $msg .= $e->getMessage()."
    ";
  155. }
  156. }
  157. ?>

复制代


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。