System.Web.Security.FormsAuthentication.Encrypt返回null

Mus*_*idd 13 asp.net forms-authentication

我正在尝试加密一些userData以使用Forms身份验证创建我自己的自定义IPrincipal和IIdentity对象 - 我已将表示我登录用户的对象序列化为Json并创建了我的FormsAuthentication票证,如下所示:

string user_item = GetJsonOfLoggedinUser();/*get JSON representation of my logged in user*/

System.Web.Security.FormsAuthenticationTicket ticket = 
    new System.Web.Security.FormsAuthenticationTicket(1,
    WAM.Utilities.SessionHelper.LoggedInEmployee.F_NAME + " " 
    + WAM.Utilities.SessionHelper.LoggedInEmployee.L_NAME,
    DateTime.Now, DateTime.Now.AddMinutes(30), false, user_item);

string encrypted_ticket = System.Web.Security.FormsAuthentication.Encrypt(ticket);

HttpCookie auth_cookie = 
    new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName,        encrypted_ticket);

Response.Cookies.Add(auth_cookie);
Run Code Online (Sandbox Code Playgroud)

但是,字符串encrypted_ticket总是如此null.user_item字符串的长度是否有限制?

谢谢穆斯塔法

Jul*_*ian 32

作为除了这个问题,当用户数据参数nullencrypted_ticket也将是null.

在这个例子中:

var ticket = new System.Web.Security.FormsAuthenticationTicket(1,
         "username",
        DateTime.Now, DateTime.Now.AddMinutes(30), false, null);

string encrypted_ticket = System.Web.Security.FormsAuthentication.Encrypt(ticket);
Run Code Online (Sandbox Code Playgroud)

encrypted_ticket现在收益null.然而,使用空字符串或者string.Empty用户数据参数,我们得到了一个有效的encrypted_ticket.

这也在MSDN上有所记录

注意

userData参数不能为null.

  • 感谢您的详细信息 - 希望userdata为null时抛出异常. (3认同)

Sky*_*ers 8

是的,典型的cookie限制是~4k.

添加加密,你可以达到<2k.

你的代码是正确的..考虑:

string user_item = "fsddfdfssdfsfdasdfsf";

System.Web.Security.FormsAuthenticationTicket ticket =
    new System.Web.Security.FormsAuthenticationTicket(1,
     " sdfasdf asdflasdfasd ",
    DateTime.Now, DateTime.Now.AddMinutes(30), false, user_item);

string encrypted_ticket = 
    System.Web.Security.FormsAuthentication.Encrypt(ticket);

HttpCookie auth_cookie = 
    new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName, encrypted_ticket);
Run Code Online (Sandbox Code Playgroud)

产量:

95ED981CFDF6AE506650E2AD01D2B52666AFC4895F0E19F14D82628C3F263EF1DA77F73BFD0284BEDCF815FBFB9AF00AF8875C61D01E27BF53C229F19C7CDE54FBC10AC478FAF02237DDC545AEF32BBA8EED88DBB09D671CD87E685E9FE05908CAE02EB05880DC1D230D67AEB0D7B0F258435D906EBD7F505DCCD738D94532E96363B13DA92060720476619672FEC670

虽然根据我的经验,臃肿的cookie被截断而不是被取消,但您的问题可能是JSON包含会使您的cookie格式错误的字符,从而破坏它.

确保您的json尺寸合理,然后尝试

string user_item = Server.UrlEncode(GetJsonOfLoggedinUser());
Run Code Online (Sandbox Code Playgroud)

确保你测量你的饼干,不要试图推动它,当你想回家看迷路和喝龙舌兰酒时,它会以微妙和恶毒的方式咬人.没有什么好玩的.