Как установить разные timeout для сессии и для куков (ASP.NET) - CodeHelper

Как установить разные timeout для сессии и для куков (ASP.NET)

1

Использую классическую forms аутентификация. И при методе

FormsAuthentication.SetAuthCookie(userName, true)

хочу чтобы создавались куки с таймаутом(реализация "запомнить меня"), указанным здесь:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Login.aspx"
           timeout="30"
           path="/"
           slidingExpiration="true"/>
  </authentication>
</system.web>

А когда используется просто сессия, хочется, чтобы таймаут брался из раздела:

<sessionState mode="InProc" cookieless="false" timeout="120" />

Ну и вообще интересно как задать разные таймауты для сессии и куков. То есть если галочка "Запомнить" выбраны создавалить куки с длительностью, например, 1 месяц, а если нет, то сессия длительностью 20-30 минут

Sergey

Как я понял из различных источников: параметр timeout стал браться из web.config для постоянных куков только с ASP.NET 2.0

Новые ответы


0

Вот одно из решений:

if (CheckBoxRememberMe.Checked) { 
  int version = 2;
  string name = userName;
  DateTime issueDate = DateTime.Now;
  DateTime expiration = DateTime.Now.AddDays(50);
  bool isPersistent = true;
  string userData = "to be found out";//language could go here 
  string cookiePath = FormsAuthentication.FormsCookiePath; 
  //Create a custom FormsAuthenticationTicket containing application specific data for the user. 
  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(version, name, issueDate, expiration, isPersistent, userData, cookiePath); 
  //Encrypt the ticket. 
  string encryptedTicket = FormsAuthentication.Encrypt(ticket); 
  //Create the cookie. 
  Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)); 
  //Redirect back to original URL. 
  Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, isPersistent)); 
} else { 
  //TODO: Set create cookie to true or false, research a little more. 
  FormsAuthentication.RedirectFromLoginPage(userName, false); 
}

А для сессии будет действовать timeout из секции forms(web.config)

1

В принципе никто не запрещает управлять куками из кода..

HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie["Font"] = "Arial";
myCookie["Color"] = "Blue";
myCookie.Expires = DateTime.Now.AddDays(30);
Response.Cookies.Add(myCookie);
Sergey

Это конечно смособ, но хотелось бы стандартными средствами(через настройки web.config)

Тем более если мы используем FormsAuthentication.SetAuthCookie(userName, true) и меняем вручную только expired куков, ticket авторизации всё равно истекает раньше, от есть переписывать на самом деле многое придётся


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.