HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!
Kullanıcı adı ile nasıl yapılıyor bir video filan iletseniz server sahipleri bu işin önüne geçebilirler
Hatayı çok basit şekilde anlatıyorum.
Burası oyuna giriş yaparken yapılan kontrollerden birisi ve hesabın oyunda olup olmadığını kontrol ediyor.
Normalde bu sorgunun ne ile olmasını beklersiniz? İpucu: Hesap ile ilgili unique veriler 'id' ve 'name'dir.
Evet cevaba gelelim bu sorgu 'name' ile yapılmaktadır. login değişkeni hesap adını içermektedir.
Yani sonuç olarak oyunda olan bir hesabın kullanıcı adı değiştirildiğinde ikinci defa aynı hesaba girilmektedir.
Çözüme gelecek olursak
1.Çözüm: 'name' değeri unique olduğu ve bu değer üzerinden kontroller gerçekleştiği için bu değeri değiştirmek gibi bir hata yapmamanız.
2.Çözüm: Bu çözümde asıl olması gerekeni yazıyorum. Bu kontroller 'id' üzerinden gerçekleşmeliydi. 'name' yerine 'id' kullanırsanız bu problem yaşanmaz.
Bunun için;
FindByLoginName
ConnectAccount
DisconnectAccount
bu yazdığım fonksiyonlarda 'std::string& login' yerine 'DWORD id' yazıp DisconnectAccount(login) ve ConnectAccount(login) olan yerleri id olarak değiştirmeniz gerek.
Son olarak bu mapin DWORD tutması için
typedef std::unordered_map<std::string, LPDESC> DESC_LOGINNAME_MAP;
yerine
typedef std::unordered_map<DWORD, LPDESC> DESC_LOGINNAME_MAP;
yazın.
Oyuncudan gelen mesaj ile hesap ismi değiştirmezseniz bu kadar düzenlemeye zahmet etmek zorunda olmazsınız.
Burası oyuna giriş yaparken yapılan kontrollerden birisi ve hesabın oyunda olup olmadığını kontrol ediyor.
Normalde bu sorgunun ne ile olmasını beklersiniz? İpucu: Hesap ile ilgili unique veriler 'id' ve 'name'dir.
Evet cevaba gelelim bu sorgu 'name' ile yapılmaktadır. login değişkeni hesap adını içermektedir.
Yani sonuç olarak oyunda olan bir hesabın kullanıcı adı değiştirildiğinde ikinci defa aynı hesaba girilmektedir.
Çözüme gelecek olursak
1.Çözüm: 'name' değeri unique olduğu ve bu değer üzerinden kontroller gerçekleştiği için bu değeri değiştirmek gibi bir hata yapmamanız.
2.Çözüm: Bu çözümde asıl olması gerekeni yazıyorum. Bu kontroller 'id' üzerinden gerçekleşmeliydi. 'name' yerine 'id' kullanırsanız bu problem yaşanmaz.
Bunun için;
FindByLoginName
ConnectAccount
DisconnectAccount
bu yazdığım fonksiyonlarda 'std::string& login' yerine 'DWORD id' yazıp DisconnectAccount(login) ve ConnectAccount(login) olan yerleri id olarak değiştirmeniz gerek.
Son olarak bu mapin DWORD tutması için
typedef std::unordered_map<std::string, LPDESC> DESC_LOGINNAME_MAP;
yerine
typedef std::unordered_map<DWORD, LPDESC> DESC_LOGINNAME_MAP;
yazın.
Oyuncudan gelen mesaj ile hesap ismi değiştirmezseniz bu kadar düzenlemeye zahmet etmek zorunda olmazsınız.
Son düzenleme:
Bu olay başıma 2019 yılında gelmişti, bir grup oyuncu destek ekibindeki arkadaşları kandırıp kullanıcı adlarını değiştirmişlerdi, sonrasında bir çok item kopyalama yaptılar ve tehdit ettiler, ekibimdekilere bugu söyleyeceklerini belirttiler dost gibi yaklaştılar ve ekip arkadaşlarımda inandı ben de öyle. Daha bug yapmayacaklarını söyleyip sürekli bize kanka şunla küstüm hesabıma girmemesi gerekiyor hesabın kullanıcı adı şifresi maili telefonu gibi bilgileri şu şekilde değiştirir misin diyip sürekli kullandılar
fakat hala anlamamıştık halbuki ellerimizle bug yaptırıyorlardı neyse sonunda 1 haftalık incelemem sonucunda loglar olsun mesajlaşmalar olsun farkettim ki sürekli ekibe kullanıcı ismi değiştirtiyorlar test serverde aktif karakterimin kullanıcı adını değiştirdim ve aynı chden oyuna girdim wtf oldum
sonra farklı bir chden girdim ver yansın her yaptığın işlem resmen kopyalamaya sebebiyet veriyordu ticarete item atıyordum diğer karaktere veriyordum ch1 deki charda hala item duruyorudu
vs vs. bulmam 1 haftamı aldı resmen adamlar bizle daş daş geçtiler
böylede bir olaydı şimdi görünce anılarım depreşti çok stresli günlerdi @__dracaryS__ hatırlıyon mu knk bugu bulduktan sonra anlatmıştım
zaman çabuk geçiyor.
Trigger ile login alanının değiştirilmesini engelleyebilirsiniz bu şekilde ne admin panelinden nede db üzerinden değiştiremezler.
fakat hala anlamamıştık halbuki ellerimizle bug yaptırıyorlardı neyse sonunda 1 haftalık incelemem sonucunda loglar olsun mesajlaşmalar olsun farkettim ki sürekli ekibe kullanıcı ismi değiştirtiyorlar test serverde aktif karakterimin kullanıcı adını değiştirdim ve aynı chden oyuna girdim wtf oldum
sonra farklı bir chden girdim ver yansın her yaptığın işlem resmen kopyalamaya sebebiyet veriyordu ticarete item atıyordum diğer karaktere veriyordum ch1 deki charda hala item duruyorudu
vs vs. bulmam 1 haftamı aldı resmen adamlar bizle daş daş geçtiler
böylede bir olaydı şimdi görünce anılarım depreşti çok stresli günlerdi @__dracaryS__ hatırlıyon mu knk bugu bulduktan sonra anlatmıştım
zaman çabuk geçiyor.Trigger ile login alanının değiştirilmesini engelleyebilirsiniz bu şekilde ne admin panelinden nede db üzerinden değiştiremezler.
SQL:
DELIMITER $$
CREATE TRIGGER trigger_account_login BEFORE UPDATE ON account FOR EACH ROW
BEGIN
IF NEW.login <> OLD.login THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'login değiştirilemez!';
END IF;
END $$
DELIMITER;
Son düzenleme:
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 9
- Görüntüleme
- 1K
- Cevaplar
- 20
- Görüntüleme
- 2K
- Cevaplar
- 2
- Görüntüleme
- 315
- Cevaplar
- 33
- Görüntüleme
- 3K
