Merhaba,
Hazırladığımız web sitelerinde hem kayıtlı kullanıcıların hem de anonim kullanıcıların haklarını ayarlarız, bazı bilgilerini saklarız ve daha sonra gösteririz. Bütün bunları da kod içerisinde yaparız. Aşağıda aklıma gelen bazı merak edilen ayrıntıları vereceğim, bunlar dışında sorununuz olursa bana e-posta atarsanız size hemen cevap verir ve bu listeye sorunuzun cevabını eklerim.
- Kayıtlı kullanıcının ID'sini nasıl alırım?
Kayıtlı kullanıcının ID'si aşağıdaki kod ile alınabilir.
(Guid)Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey;
-Aspnet_Profile tablosundaki UserId kolonu ile Aspnet_Users tablosundaki arasında fark var mıdır? Varsa fark nedir?
Aralarında fark vardır. Aspnet_Users tablosunda yalnızca kayıtlı kullanıcıların listesi ve özellikleri barındırılırken, aspnet_Profile tablosunda kayıtlı ve kayıtsız (web.config dosyasında izin verildiği taktirde kayıtsız kullanıcıların da bilgileri saklanır) kullanıcıların bilgileri saklanır. Ayrıca aspnet_profile tablsounda aspnet_Users tablosunda bulunan özellikler saklanmaz, onun yerine bizim saklamak istediğimiz başka değerler saklanır. (Örn. Son bakılan ürün kodu, Telefon numarası, vb...) Aradaki bu farktan ötürü Profile tablosunda UserId kolonunda anonymous (kayıtsız) kullanıcılar için otomatik olarak bir UserId yaratılır ve bu UserId değeri kod esnasında AnonymousID (Request.AnonymousID) olarak anılır. Eğer aspnet_Profile tablosunda değer(ler) saklayıp sonra onlara ulaşabilmek isterseniz ya da aspnet_Profile tablosundaki UserId değerine bağlı başka tablolarınız varsa kullanmanız gereken ID; Kayıtsız kullanıcılar için AnonymousID, kayıtlı kullanıcılar için ise UserId oluyor (Bu UserId'nin nasıl alınacağını bu makale içindeki bir önceki soruda cevapladım).
-Kayıtsız bir kullanıcımın profile'ında bazı değerler saklıyorum, bu kullanıcı kayıt olduğunda bu sakladığım değerleri nasıl kayıtlı kullanıcının değerlerine taşırım?
Bunun için Global.asax dosyasında bir event'i handle etmek gerekiyor.
void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs e)
Bu event'i yukarıdaki fonksiyonu global.asax dosyasının içine yazdıktan sonra, içine istenilen komutlar yazılabilir. Ancak bu konuda dikkat edilmesi gereken bazı hususlar var. İlk olarak kayıt olan kullanıcının kayıt olmadan önceki profile tablosunda saklanan değerleri otomatik olarak silinmez bunu silmek gerekir. Aynı şekilde kullanıcının cookie'sinde saklanan anonymousId değeri de silinmelidir. Bu iki işilem için aşağıdaki kodu da OnMigrateAnonymous fonksiyonunun içine yazmalıyız.
AnonymousIdentificationModule.ClearAnonymousIdentifier();
ProfileManager.DeleteProfile(e.AnonymousID);
Yani özet olarak aşağıdaki kodu yazmalıyız Global.asax dosyasının içine;
void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs e)
{
//Burada bir profile yaratıp içine değerleri kopyalamalı
ProfileCommon pfcT= Profile.GetProfile(e.AnonymousID);
Profile.TelNo = pfcT.TelNo;
Profile.Save();
AnonymousIdentificationModule.ClearAnonymousIdentifier();
ProfileManager.DeleteProfile(e.AnonymousID);
}
- Profile kullanımını nasıl aktif hale getirebilirim? Bazı değerlerin kayıtsız kullanıcılarda da geçerli olması için ne yapmalıyım?
Profıle kullanımını aktif hale getirmek için web uygulamasının kök (root) klasöründeki web.config dosyasına aşağıdakine benzer bir kod yazmak gerekiyor.
<system.web> altına şunları yazmalıyız.
<anonymousIdentification enabled="true" cookieName="deneme.anonyous" cookiePath="/" cookieless="UseCookies" cookieRequireSSL="true" domain="deneme.com"/>
<profile enabled="true" automaticSaveEnabled="false" defaultProvider="DenemeProfileProvider">
<providers>
<clear/>
<add connectionStringName="BaseSQL" name="DenemeProfileProvider" type="System.Web.Profile.SqlProfileProvider"/>
</providers>
<properties>
<clear/>
<group name="Genel">
<add name="FirstName" type="System.String" allowAnonymous="true"/>
<add name="LastName" type="System.String" allowAnonymous="true"/>
<add name="DateOfBirth" type="System.DateTime"/>
<add name="Sex" type="System.Boolean"/>
</group>
<group name="Iletisim">
<add name="CepTel" type="System.String"/>
<add name="YerelTel" type="System.String"/>
<add name="EMail" type="System.String" allowAnonymous="true"/>
</group>
</properties>
</profile>
Bu örnekteki bazı satırların içinde allowAnonymous="true"ibaresi var, bu ibare sayesinde kayıtsız kullanıcılarında bu özelliklere sahip olması sağlanmış oluyor.
Şimdilik aklıma gelenler bunlar. Aklıma geldikçe eklemeye devam edeceğim.
İyi çalışmalar dilerim.