0

В моем приложении mvc 4 я создаю файл cookie с некоторой другой информацией. Он отлично работает, а данные меньше 1 КБ, но когда он превышает 1Кб, cookie никогда не создает.Больше, чем 1KB cookie не сохраняется в моем приложении MVC4

Насколько мне известно, максимальный размер файла cookie - apx 4KB. Мой код ниже.

if (result.Status == ActionStatus.Success) 
{ 
    AuctionSiteApplication = result.Data; 

    CreateCustomAuthorisationCookie(AuctionSiteApplication.User.Email, obj.RememberMe, new JavaScriptSerializer().Serialize(AuctionSiteApplication)); 
    if ((AuctionSiteApplication.User.UserType == UserType.SUAdmin) || (AuctionSiteApplication.User.UserType == UserType.Admin)) 
    { 
     return RedirectToAction("Index", "Dashboard", new { area = "Admin" }); 
    } 
    else 
    { 
     return RedirectToAction("Index", "Home", new { area = "" }); 
    } 
} 


protected void CreateCustomAuthorisationCookie(String user_name, Boolean is_persistent, String custom_data) 
{ 
    FormsAuthenticationTicket auth_ticket = 
     new FormsAuthenticationTicket(
      1, user_name, 
      DateTime.Now, 
      DateTime.Now.AddMinutes(30), 
      is_persistent, custom_data, "" 
     ); 

    String encrypted_ticket_ud = FormsAuthentication.Encrypt(auth_ticket); 
    HttpCookie auth_cookie_ud = new HttpCookie(Cookies.UserCookie, encrypted_ticket_ud); 
    if (is_persistent) auth_cookie_ud.Expires = auth_ticket.Expiration; 
    System.Web.HttpContext.Current.Response.Cookies.Add(auth_cookie_ud);  
} 


protected override void OnAuthorization(AuthorizationContext filter_context) 
{ 
    if (Request.RawUrl.ToLower().Contains("www.")) filter_context.Result = RedirectPermanent(Request.RawUrl.ToLower().Replace("www.", "")); 
    HttpCookie auth_cookie = Request.Cookies[Cookies.UserCookie]; 

    #region If auth cookie is present 
    if (auth_cookie != null) 
    { 
     FormsAuthenticationTicket auth_ticket = FormsAuthentication.Decrypt(auth_cookie.Value); 
     AuctionSiteApplication = new JavaScriptSerializer().Deserialize<AuctionSiteApplication>(auth_ticket.UserData); 
     System.Web.HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(auth_ticket), null); 
     ViewBag.AuctionSiteApplication = AuctionSiteApplication; 
     base.OnAuthorization(filter_context); 
    } 
    #endregion 

    // Rest Code 
    ... 
} 

Ниже данные, которые я пытаюсь сохранить в куки, который не спасает

{"User":{"UserID":1,"Email":"[email protected]","FirstName":"abc","LastName":"Arora","UserType":2,"UserCompanies":[{"CompanyId":35,"CompanyName":"New Company","CompanyRoleId":96,"IsAdmin":true},{"CompanyId":36,"CompanyName":"tryrtyr","CompanyRoleId":103,"IsAdmin":true},{"CompanyId":37,"CompanyName":"abc","CompanyRoleId":109,"IsAdmin":false},{"CompanyId":35,"CompanyName":"New Company","CompanyRoleId":98,"IsAdmin":false},{"CompanyId":37,"CompanyName":"abc","CompanyRoleId":109,"IsAdmin":false},{"CompanyId":37,"CompanyName":"abc","CompanyRoleId":109,"IsAdmin":false},{"CompanyId":37,"CompanyName":"abc","CompanyRoleId":109,"IsAdmin":false},{"CompanyId":37,"CompanyName":"abc","CompanyRoleId":109,"IsAdmin":false},{"CompanyId":37,"CompanyName":"abc","CompanyRoleId":109,"IsAdmin":false},{"CompanyId":36,"CompanyName":"tryrtyr","CompanyRoleId":105,"IsAdmin":false}],"IsAuthenticated":true},"Company":{"CompanyId":0,"CompanyName":null,"CompanyRoleId":96,"IsAdmin":true}} 

Ниже данные, которые я пытаюсь сохранить в куки, который сохранение правильно

{"User":{"UserID":2,"Email":"[email protected]","FirstName":"abc","LastName":"Arora","UserType":1,"UserCompanies":[{"CompanyId":35,"CompanyName":"New Company","CompanyRoleId":0,"IsAdmin":false},{"CompanyId":36,"CompanyName":"tryrtyr","CompanyRoleId":0,"IsAdmin":false},{"CompanyId":37,"CompanyName":"abc","CompanyRoleId":0,"IsAdmin":false}],"IsAuthenticated":true},"Company":{"CompanyId":0,"CompanyName":"SUAdmin","CompanyRoleId":2,"IsAdmin":false}} 
+0

Вы уверены, что хотите сохранить эту чувствительную инфарматуру в файле cookie? Выставлять электронные письма, имена, идентификаторы базы данных и т. Д. Любой может видеть и может быть изменен. Например, установите IsAdmin true с помощью блокнота –

+0

Вся эта информация хранится в кодированной форме с использованием функции FormsAuthentication.Encrypt –

ответ

1

Я все еще думаю, что нет никаких оснований хранить эти данные в файле cookie. Вы должны каждый раз проверять их на свою базу данных, чтобы вы ничего не получали.
Однако проблема в том, что ваши данные имеют 968 символов (1KB), и после регистрации она больше 4 КБ.
UPDATE:
Я пытаюсь и мой результат теста, что зашифрованная строка, сгенерированная методом Enrypt, составляет 4032 байт. Я думаю, что это слишком близко к пределу. С другими данными cookie я уверен, что он превышает лимит.

+0

Позвольте мне проверить это. :) –

Смежные вопросы