我正在寻找关于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;
}
答案 0 :(得分:12)
经验法则:仅在cookie中存储最小值(通常这是用户ID),并在每次需要时使用此最小值从数据存储区中获取剩余部分。如果您对表演感到满意,可以停止阅读。
如果您发现对数据存储区的查询过多,则可以使用会话或缓存查询结果。
答案 1 :(得分:2)
cookie的大小限制为4096字节。在此之后,如果要继续存储在cookie中,您可能需要将数据块化为多个cookie。显然,你现在增加了从所有人那里读取重建身份验证票据+数据的复杂性,如果一个cookie没有与其他人一起发送,则可能会产生一些可怕的后果。
您是否考虑过使用其他会话商店?这实际上就是你在这里使用cookie,除非它与身份验证有关,并且需要在会话可访问之前在处理管道中可用,我倾向于考虑将其放入会话中。如果不想在会话中存储会话,则可以使用进程外会话存储(如数据库)。
答案 2 :(得分:1)
您不应该在身份验证Cookie中添加任何身份验证数据。 Asp.net对cookie的使用与任何Web编程平台的使用情况大致相同。 您可以根据需要设置任意数量的cookie,并随意存储。 一些例子:
http://www.cookiecentral.com/faq/
http://www.asp.net/general/videos/read-write-and-delete-cookies-in-aspnet