Без отслеживания обязательств, но очень аккуратно и быстро.
template <typename F>
struct ScopeExit {
ScopeExit(F&& f) : m_f(std::forward<F>(f)) {}
~ScopeExit() { m_f(); }
F m_f;
};
template <typename F>
ScopeExit<F> makeScopeExit(F&& f) {
return ScopeExit<F>(std::forward<F>(f));
};
#define STRING_JOIN(arg1, arg2) STRING_JOIN2(arg1, arg2)
#define STRING_JOIN2(arg1, arg2) arg1 ## arg2
#define ON_SCOPE_EXIT(code) auto STRING_JOIN(scopeExit, __LINE__) = makeScopeExit([&](){code;})
Использование
{
puts("a");
auto _ = makeScopeExit([]() { puts("b"); });
// More readable with a macro
ON_SCOPE_EXIT(puts("c"));
} # prints a, c, b
Да, типичный ограничение на количество файлов cookie составляет ~ 4 КБ.
Добавьте шифрование, и вы получите <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);
Результаты:
95ED981CFDF6AE506650E2AD01D2B52666AFC4895F0E19F14D82628C3F263EF1DA77F73BFD0284BEDCF815FBFB9AF00AF8875C61D01E27BF53C229F19C7CDE54FBC10AC478FAF02237DDC545AEF32BBA8EED88DBB09D671CD87E685E9FE05908CAE02EB05880DC1D230D67AEB0D7B0F258435D906EBD7F505DCCD738D94532E96363B13DA92060720476619672FEC670
По моему опыту, раздутые файлы cookie усекаются, а не обнуляются, ваша проблема, вероятно, в том, что JSON содержит символы, которые сделают ваш файл cookie искаженным, поэтому сломать это.
Убедитесь, что ваш json-файл разумного размера, затем попробуйте
string user_item = Server.UrlEncode(GetJsonOfLoggedinUser());
Убедитесь, что вы измеряете свои куки-файлы и не пытаетесь их подтолкнуть, они будут кусаться незаметно и злобно, когда вы захотите быть дома и смотреть «Остаться в живых» и пить текила. не весело.