Muzibu platformu (Tenant 1001), kullanicilarin ayni anda kac cihazdan erisebilecegini kontrol eden
bir device limit sistemi kullanir. Bu sistem Redis session driver ile birlikte calisir ve
user_active_sessions tablosu
uzerinden device tracking yapar.
Redis (SESSION_DRIVER=redis)
Hizli ve olceklenebilir session yonetimi
user_active_sessions tablosu
Tenant database'de saklanir
subscriptions tablosu
Tenant database'de saklanir
tenant1001:
| Kolon | Tip | Aciklama |
|---|---|---|
| id | bigint | Primary key |
| user_id | bigint FK | users tablosuna referans |
| session_id | varchar(255) | Laravel session ID (unique) |
| device_type | varchar(20) | desktop, mobile, tablet |
| device_name | varchar(100) | Ornek: "Windows - Chrome" |
| browser | varchar(50) | Chrome, Firefox, Safari... |
| platform | varchar(50) | Windows, macOS, Android... |
| ip_address | varchar(45) | IPv4 veya IPv6 |
| last_activity | timestamp | Son aktivite zamani |
users.device_limit kolonu NULL degilse bu deger kullanilir
Aktif subscription'in plan'indaki device_limit degeri
setting('auth_device_limit') veya varsayilan 1
| Metod | Aciklama |
|---|---|
| registerSession($user) | Login sirasinda cagrilir, session kaydeder |
| unregisterSession($user) | Logout sirasinda cagrilir, session siler |
| updateSessionActivity($user) | Polling ile cagrilir, session gecerliyse true |
| getActiveDevices($user) | Aktif cihaz listesini doner |
| getDeviceLimit($user) | 3-seviyeli hiyerarsiyle limit doner |
| terminateSessionById($id) | Belirli bir session'i sonlandirir |
| terminateOtherSessions($user) | Mevcut haric tum session'lari siler |
/api/auth/login
Kullanici giris yapar, session olusturur, device kaydeder
/api/auth/logout
Cikis yapar, session siler, device kaydini kaldirir
/api/auth/me
Kullanici bilgileri, premium durumu, aktif cihazlar
/api/auth/check-session
Session gecerliligini kontrol eder (polling icin)
/api/auth/terminate-device
Belirli bir cihazi cikis yaptirir
/api/auth/get-active-devices
Aktif cihaz listesini getirir (modal icin)
Blade layout'ta tanimlanan global JavaScript objesi. Alpine.js componentleri bu objeden kullanici bilgilerini alir.
window.muzibuPlayerConfig = {
isLoggedIn: true/false,
currentUser: {
id: 1,
name: "Kullanici",
email: "email@example.com",
is_premium: true/false,
trial_ends_at: "2025-12-08T17:42:49+00:00",
subscription_ends_at: "2025-12-08T17:42:49+00:00"
},
tenantId: 1001
}
currentUser?.is_premium false ise "Ucretsiz Uye" gosterir
trial_ends_at varsa "Deneme Uyesi" gosterir
subscription_ends_at varsa "Premium" gosterir
Olasi Nedenler:
Cozum:
php artisan cache:clear
curl -s https://muzibu.com/opcache-reset.php
Olasi Nedenler:
Cozum:
-- Tenant DB'de tablo var mi kontrol et:
SHOW TABLES LIKE 'user_active_sessions';
-- Eski kayitlari temizle (30 dk'dan eski):
DELETE FROM user_active_sessions WHERE last_activity < NOW() - INTERVAL 30 MINUTE;
# Premium durumunu kontrol et (Tinker):
tenancy()->initialize(App\Models\Tenant::find(1001));
$user = App\Models\User::find(1);
echo $user->isPremiumOrTrial(); // true/false
# Aktif cihazlari kontrol et:
$deviceService = app(Modules\Muzibu\App\Services\DeviceService::class);
$deviceService->getActiveDevices($user);