Pau*_*aul 8 cookies asp.net-mvc
我正在寻找关于ASP.Net MVC中的cookie的一些指导(或者只是一般的cookie处理).我一直在存储有关通过cookie中的表单登录进行身份验证的用户的身份验证信息.这很好用,但我现在需要在cookie中存储更多信息.这些附加信息实际上并不是"与身份验证相关",因此我对将其存储在身份验证票证中犹豫不决.是否有更好的存储额外信息的做法.是否可以设置多个cookie(如果这样做是好的/坏的做法)?其他我应该考虑的事情?
这是我用于设置身份验证票证并将其包装在cookie中的当前代码:
private HttpCookie GetAuthCookie(AuthToken authToken)
{
    var authTokenXml = serializationService.Serialize(authToken);
    var authCookieString = FormsAuthentication.Encrypt(
        new FormsAuthenticationTicket(
            0,
            Keys.AuthToken,
            DateTime.Now,
            DateTime.Now.AddMinutes(AppSettings.SessionTimeoutMinutes),
            true,
            authTokenXml));
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, authCookieString)
                     {
                         Expires = DateTime.Now.AddDays(AppSettings.AuthCookieExpireDays)
                     };
    return cookie;
}
Dar*_*rov 12
经验法则:仅在cookie中存储最小值(通常这是用户ID),并在每次需要时使用此最小值从数据存储区中获取剩余部分.如果您对表演感到满意,可以停止阅读.
如果您意识到对数据存储区的查询太多,则可以使用会话或缓存查询结果.
Cookie 的大小有大小限制,即 4096 字节。此后,如果您想继续存储在 cookie 中,您可能需要将数据分块到多个 cookie 中。显然,现在读取所有内容以重建身份验证票证 + 数据的复杂性增加了,如果一个 cookie 没有与其余 cookie 一起发送,则可能会产生一些可怕的后果。
您是否考虑过使用不同的会话存储?这实际上就是您在这里使用 cookie 的方式,除非它与身份验证相关并且需要在会话可访问之前在处理管道中可用,否则我倾向于考虑将其放入会话中。如果不想在进程中存储会话,您可以使用进程外会话存储,例如数据库。