php同时使用session和cookie来保存用户登录信息的实现代码

下面小编就为大家带来一篇php同时使用session和cookie来保存用户登录信息的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧。

1、用户登录状态操作类UserLogin

  1. <?php
  2. final class UserLogin {
  3. public function __construct() {
  4. }
  5. public static function getUserInfo() {
  6. if (isset($_COOKIE["user_id"])&&$_COOKIE["user_id"]&&(trim($_COOKIE["user_id"])!="")) {
  7. if (isset($_SESSION["USER_INFO"]))
  8. return $_SESSION["USER_INFO"];
  9. $dao = new UserDao();
  10. $user = $dao->find($_COOKIE["user_id"]);
  11. if ($user) {
  12. $_SESSION["USER_INFO"] = $user;
  13. setcookie("docloud_sid", session_id(), time() + 36000);
  14. setcookie("user_id", $_COOKIE["user_id"], time() + 36000);
  15. if (array_key_exists("selected_prj_id", $_COOKIE))
  16. setcookie("selected_prj_id", $_COOKIE["selected_prj_id"], time() + 36000);
  17. if (array_key_exists("selected_class_id", $_COOKIE))
  18. setcookie("selected_class_id", $_COOKIE["selected_class_id"], time() + 36000);
  19. if (array_key_exists("selected_image_id", $_COOKIE))
  20. setcookie("selected_image_id", $_COOKIE["selected_image_id"], time() + 36000);
  21. if (array_key_exists("test_image_ids", $_COOKIE))
  22. setcookie("test_image_ids", $_COOKIE["test_image_ids"], time() + 36000);
  23. if (array_key_exists("upload_image_ids", $_COOKIE))
  24. setcookie("upload_image_ids", $_COOKIE["upload_image_ids"], time() + 36000);
  25. return $user;
  26. }
  27. }
  28. self::clearCookie();
  29. return null;
  30. }
  31. public static function setUserInfo($userInfo) {
  32. $_SESSION["USER_INFO"] = $userInfo;
  33. setcookie("docloud_sid", session_id(), time() + 36000);
  34. setcookie("user_id", $userInfo->getId(), time() + 36000);
  35. }
  36. public static function isLogin() {
  37. if (self::getUserInfo()) {
  38. return true;
  39. }
  40. return false;
  41. }
  42. public static function delUserInfo() {
  43. self::clearCookie();
  44. session_destroy();
  45. }
  46. private static function clearCookie() {
  47. setcookie("docloud_sid", "", time() - 36000);
  48. setcookie("user_id", "", time() - 36000);
  49. setcookie("selected_prj_id", "", time() - 36000);
  50. setcookie("selected_class_id", "", time() - 36000);
  51. setcookie("selected_image_id", "", time() - 36000);
  52. setcookie("test_image_ids", "", time() - 36000);
  53. setcookie("upload_image_ids", "", time() - 36000);
  54. }
  55. }
  56. ?>

2、在用户输入用户名、密码处调用来做相关判定

  1. <?php
  2. require_once 'Init.php';
  3. // if logged in, logout
  4. if (UserLogin::isLogin() && $_COOKIE["user_id"]==1) {
  5. UserLogin::delUserInfo();
  6. }
  7. else if (UserLogin::isLogin()){
  8. Utils::redirect('welcome');
  9. }
  10. $username = null;
  11. $password = null;
  12. $msg = "";
  13. if (isset($_POST['username']) && isset($_POST['password'])) {
  14. $username = addslashes(trim(stripslashes($_POST ['username'])));
  15. $password = addslashes(trim(stripslashes($_POST ['password'])));
  16. // validate
  17. $errors = LoginValidator::validate($username, $password);
  18. if (emptyempty($errors)) {
  19. // save
  20. $dao = new UserDao();
  21. $user = $dao->findByName($username);
  22. $last_login_ip = Utils::getIpAddress();
  23. $user->setLastLoginIp($last_login_ip);
  24. $now = new DateTime();
  25. $user->setLastLoginTime($now);
  26. $dao->save($user);
  27. UserLogin::setUserInfo($user);
  28. Flash::addFlash('登录成功!');
  29. Utils::redirect('welcome');
  30. }
  31. foreach ($errors as $e) {
  32. $msg .= $e->getMessage()."<br>";
  33. }
  34. }
  35. ?>

以上这篇php同时使用session和cookie来保存用户登录信息的实现代码就是小编分享给大家的全部内容了。