30 Mart 2015 Pazartesi

Asp.net Mvc 5 Web session cookie içerisinde fazladan veri tutma

Bazen web sitesine giriş yapan kullanıcı için kullanıcı adı yanında başka verilerde tutmak isteyebiliriz. Bunu yapmanın en kolay yollarından biri FormsAuthenticationExtensions kütüphanesidir.
1. Cookie içinde tutacağımız sınıf
public class CurrentUser
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
}
 2. Giriş yapmış olan kullanıcıya herhangi bir yerden ulaşmak için global bir fonksiyon tanımlıyoruz.
using FormsAuthenticationExtensions;

public static class CustomMembership
{
    public static CurrentUser CurrentUser()
    {
        var user = new CurrentUser();

        try
        {
            var currentUser = HttpContext.Current.User;
            var ticketData = ((FormsIdentity)currentUser.Identity).Ticket.GetStructuredUserData();
            user.Id = Int32.Parse(ticketData["Id"]);
            user.Name = currentUser.Identity.Name;
            user.Email = ticketData["Email"];
            user.Phone= ticketData["Phone"];
        }
        catch (Exception ex)
        {

        }

    return user;
    }
}
3. Kullanıcı girişi yapıldıktan sonra cookie oluşturma
[HttpPost]
public ActionResult Login(string userName, string password, bool rememberMe)
{
    ...

    var user = _userService.GetUser(userName, password);

    // kullanıcı girişi başarılı ise 
    // ------------------------------------------------------------------------
    var ticketData = new NameValueCollection
    {
        { "Id", user.Id.ToString() },
        { "UserName", user.UserName },
        { "Email", user.Email },
        { "Phone", user.Phone }
    };

    new FormsAuthentication().SetAuthCookie(userName, rememberMe, ticketData);
    //
    // -------------------------------------------------------------------------

    ...
}

Kullanıcı girişinden sonra ekstra verileri artık cookie içinde tanımlamış olduk. Şimdi istediğimiz yerde bunu kullanabiliriz. Örnek kullanım:
var userName = CustomMembership.CurrentUser().Name;
var email = CustomMembership.CurrentUser().Email;
var phone = CustomMembership.CurrentUser().Phone;
 Alıntıdır. Ali Rıza Adıyahşi hocamıza tsk ederiz.