SessionApp.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace App\Module\AppGame;
  3. use App\Module\Ulogic\Enum\RULE;
  4. use App\Module\Ulogic\Unit\User;
  5. use UCore\Exception\LogicException;
  6. use UCore\TokenSession;
  7. use UCore\Version;
  8. class SessionApp extends TokenSession
  9. {
  10. /**
  11. * 3600*24*7=86400*7=604800
  12. *
  13. * @var int $ttl 过去秒数 604800=7天
  14. */
  15. static $ttl = 1204800;
  16. const ID_KEY = 'user_id';
  17. public static $prefix = 'app_';
  18. /**
  19. * 获取当前用户的ID
  20. *
  21. * @return int
  22. * @throws LogicException
  23. */
  24. static public function getUserId(): int
  25. {
  26. // H::check();
  27. return (int)self::get(self::ID_KEY, 0);
  28. }
  29. /**
  30. * 设置登录
  31. *
  32. * @param User $user
  33. * @return User
  34. * @throws LogicException
  35. */
  36. static public function setLogin(\App\Module\User\Models\User $user, $token = false, $role = '')
  37. {
  38. // todo 不清楚作用
  39. // \App\Module\User\User::infoinfo($user->id, true);
  40. self::set(self::ID_KEY, $user->id);
  41. // todo 用户角色:是否社区长,后续补齐流程
  42. // if (!$role) {
  43. // $role = self::getRole($user);
  44. // }
  45. //
  46. // self::set('role', $role);
  47. $sData = self::get();
  48. // dd($sData,self::$session_id);
  49. $data = [
  50. 'user_id' => $user->id,
  51. 'role' => $role
  52. ];
  53. if ($token) {
  54. $data['token'] = self::getSessionId();
  55. // todo 单点登录
  56. // $one = Config::getValueDefaultCache('login_only_one', false);
  57. self::saveUKeys();
  58. // if ($one) {
  59. // self::deleteOnlyOne();
  60. // }
  61. }
  62. return $data;
  63. }
  64. /**
  65. * 退出登录
  66. *
  67. * @return void
  68. * @throws LogicException
  69. */
  70. static public function logout()
  71. {
  72. self::set(self::ID_KEY, 0);
  73. }
  74. static public function setData($key, $value)
  75. {
  76. self::set($key, $value);
  77. }
  78. static public function getData($key, $value = null)
  79. {
  80. return self::get($key, $value);
  81. }
  82. /**
  83. * 获取角色
  84. *
  85. * @param User $user
  86. * @return int
  87. */
  88. static public function getRole(\App\Module\User\Models\User $user): RULE
  89. {
  90. return RULE::ROLE_USER;
  91. }
  92. /**
  93. * 删除其他 ,只剩最后一个
  94. *
  95. * @param $uid
  96. * @return void
  97. * @throws LogicException
  98. */
  99. static public function deleteOnlyOne($uid = null)
  100. {
  101. $uid = $uid ?? self::getUserId();
  102. $ukeys = \Illuminate\Support\Facades\Cache::get('ukeys' . $uid, []);
  103. $last = array_pop($ukeys);
  104. foreach ($ukeys as $k => $v) {
  105. \Illuminate\Support\Facades\Cache::delete($v);
  106. }
  107. \Illuminate\Support\Facades\Cache::set('ukeys' . $uid, [ $last ], static::$ttl);
  108. }
  109. /**
  110. * 保存用户 keys
  111. *
  112. * @return array
  113. * @throws LogicException
  114. */
  115. static public function saveUKeys($uid = null)
  116. {
  117. $uid = $uid ?? self::getUserId();
  118. $ukeys = \Illuminate\Support\Facades\Cache::get('ukeys' . $uid, []);
  119. $ukeys[] = self::getKey();
  120. // dump($ukeys);
  121. // dump($uid,$ukeys);
  122. \Illuminate\Support\Facades\Cache::set('ukeys' . $uid, $ukeys, static::$ttl);
  123. return $ukeys;
  124. }
  125. /**
  126. * 获取用户Keys
  127. *
  128. * @return array
  129. * @throws LogicException
  130. */
  131. public static function getUKeys($uid = null)
  132. {
  133. $uid = $uid ?? self::getUserId();
  134. $ukeys = \Illuminate\Support\Facades\Cache::get('ukeys' . $uid, []);
  135. // dump($uid,$ukeys);
  136. return $ukeys;
  137. }
  138. /**
  139. * 删除 用户Keys
  140. *
  141. * @param $uid
  142. * @return void
  143. * @throws LogicException
  144. */
  145. public static function removeUKeys($uid = null)
  146. {
  147. $uid = $uid ?? self::getUserId();
  148. $ukeys = \Illuminate\Support\Facades\Cache::get('ukeys' . $uid, []);
  149. foreach ($ukeys as $k => $v) {
  150. \Illuminate\Support\Facades\Cache::delete($v);
  151. }
  152. \Illuminate\Support\Facades\Cache::delete('ukeys' . $uid);
  153. }
  154. static protected function getKey()
  155. {
  156. return static::$prefix . static::$session_id . date('W'). '_' .Version::VERSION;
  157. }
  158. }