Я обычно не играю с Cookies, но я хотел изучить этот вариант, который я обычно использую для переменных Session.Cookies не установлены быстро
Если я установил Cookie, а затем попытаюсь прочитать его, я не получу значение, которое я только что установил.
Однако, если я обновляю страницу или закрываю браузер и открываю его резервную копию, Cookie будет настроен.
Я отлаживаю это в Chrome. Разве это имеет значение?
public const string COOKIE = "CompanyCookie1";
private const int TIMEOUT = 10;
private string Cookie1 {
get {
HttpCookie cookie = Request.Cookies[COOKIE];
if (cookie != null) {
TimeSpan span = (cookie.Expires - DateTime.Now);
if (span.Minutes < TIMEOUT) {
string value = cookie.Value;
if (!String.IsNullOrEmpty(value)) {
string[] split = value.Split('=');
return split[split.Length - 1];
}
return cookie.Value;
}
}
return null;
}
set {
HttpCookie cookie = new HttpCookie(COOKIE);
cookie[COOKIE] = value;
int minutes = String.IsNullOrEmpty(value) ? -1 : TIMEOUT;
cookie.Expires = DateTime.Now.AddMinutes(minutes);
Response.Cookies.Add(cookie);
}
}
Ниже, как я использую его:
public Employee ActiveEmployee {
get {
string num = Request.QueryString["num"];
string empNum = String.IsNullOrEmpty(num) ? Cookie1 : num;
return GetActiveEmployee(empNum);
}
set {
Cookie1 = (value != null) ? value.Badge : null;
}
}
Это, как я зову его, где Request.QueryString["num"]
возвращает NULL так что Cookie1
читается из:
ActiveEmployee = new Employee() { Badge = "000000" };
Console.WriteLine(ActiveEmployee.Badge); // ActiveEmployee is NULL
... но чтение от Cookie1
также возвращает null.
Есть ли такая команда, как Commit(), которую мне нужно вызвать, чтобы сразу было доступно значение cookie?
+1, должно быть 'else { // вставить текущий код _cookie1Value = cookie.Value; return _cookie1Value; } –
Кроме того, возможно, хотите установить cookie в Response.Cookies в сеттер. –
@ChrisShain: Спасибо, я перестроил и упростил геттер. Что касается вашего второго комментария, это то, что '// вставить текущий код' в сеттер. – mellamokb