Я создал проект Web Forms Application
только для проверки этого случая. Я использую шаблон веб-сайта по умолчанию .NET4
без каких-либо изменений и 3 кнопки и 1 ярлык на странице Default.aspx
.Как правильно установить и получить зашифрованный файл FormsAuthentication cookie
Кнопки:btnLogin
, btnSetCookie
, btnGetCookie
Label:lblCookieInfo
Flow:
- Нажмите Войти
- Нажмите
Set Cookie
Кнопка - Нажмите кнопку
Get Cookie
Теперь, когда я нажимаю на третью кнопку, чтобы получить печенье, всегда выдает мне ошибку, когда достигает Decrypt
метода (Invalid value for 'encryptedTicket' parameter
). Когда я пытаюсь восстановить файл cookie в httpCookie
, это пустое значение без какой-либо ценности. Что я делаю неправильно?
protected void btnLogin_Click(object sender, EventArgs e)
{
FormsAuthentication.SetAuthCookie("myUserName", createPersistentCookie: true);
Response.Redirect("~/");
}
protected void btnSetCookie_Click(object sender, EventArgs e)
{
var ticket = new FormsAuthenticationTicket(1,
"myUserName",
DateTime.Now,
DateTime.Now.AddMinutes(10),
true,
"data value of cookie",
FormsAuthentication.FormsCookiePath);
string encTicket = FormsAuthentication.Encrypt(ticket);
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)
{
Expires = ticket.Expiration,
HttpOnly = true
};
btnGetCookie.Enabled = true;
Response.Cookies.Add(authCookie);
}
protected void btnGetCookie_Click(object sender, EventArgs e)
{
var httpCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
lblCookieInfo.Visible = true;
if (httpCookie == null)
{
lblCookieInfo.Text = "Cookie is Null";
return;
}
//Here throws error!
var decryptedCookie = FormsAuthentication.Decrypt(httpCookie.Value);
if (decryptedCookie == null)
{
lblCookieInfo.Text = "Cookie can't be decrypted.";
return;
}
lblCookieInfo.Text = string.Format("Name: {0}, Is Expired: {1}, Is Persistent: {2}, Expiration: {3}, Path: {4}, User data: {5}",
decryptedCookie.Name, decryptedCookie.Expired,
decryptedCookie.IsPersistent, decryptedCookie.Expiration,
decryptedCookie.CookiePath, decryptedCookie.UserData);
}
Вы смогли определить, почему это порождает исключение? У меня есть аналогичная проблема, сейчас у меня проблемы с изоляцией. Я заметил, что этот код не проверяет значение пустой cookie, как указано здесь: http://stackoverflow.com/questions/18895746/invalid-value-for-encryptedticket-parameter/24837242#24837242, который может помочь, но я все еще любопытно, почему это было бы пусто? –
@mklinker, я не могу вспомнить прямо сейчас, но я помню, что проблема была смехотворно простой. Вероятно, это то, что вы говорите. – CodeArtist
@mklinker, пожалуйста, взгляните на мой ответ ниже, это может помочь вам ... – CodeArtist