2009-08-17 2 views
8

HIКак сохранить пользователя в течение 2 недель?

Я использую asp.net mvc с членством asp.net.

Я хочу установить флажок, который, если щелкнуть, заставит пользователей войти в систему в течение 2 недель (если только они не очистят файлы cookie).

Так что я знаю, их это

FormsAuthentication.SetAuthCookie (Username, createPersistentCookie)

, но я не знаю, как настроить его для 2week удержания.

Я переписал большую часть членства. Поэтому я не использую такие вещи, как Create() и VerifyUser().

+0

ли condsidered вы маркировки ответ, как принято Anwer? – 2009-08-19 16:16:42

ответ

4

Вы можете установить глобальный тайм-аут сеанса (значение в минутах) в web.config, например.

Это будет для всех прошедших проверку подлинности пользователей. Если вы хотите использовать функцию «Запомнить меня», вам нужно будет написать свой собственный код, чтобы установить cookie/ticket. Нечто подобное (взято from here):

protected void Page_Load() 
{ 
    if (Request.Cookies["username"] == null || Request.Cookies["username"].Value.ToString().Trim() == "") 
    { 
     Login1.RememberMeSet = true; 
    } 
    else 
    { 
     Login1.UserName = Request.Cookies["username"].Value.ToString().Trim(); 
     Login1.RememberMeSet = true; 
    } 
} 
protected void RememberUserLogin() 
{ 
    // Check the remember option for login 

    if (Login1.RememberMeSet == true) 
    { 
     HttpCookie cookie = new HttpCookie("username"); 
     cookie.Value = Login1.UserName.Trim(); 
     cookie.Expires = DateTime.Now.AddHours(2); 

     HttpContext.Current.Response.AppendCookie(cookie); 
     Login1.RememberMeSet = true; 

    } 
    else if (Login1.RememberMeSet == false) 
    { 
     HttpContext.Current.Response.Cookies.Remove("username"); 
     Response.Cookies["username"].Expires = DateTime.Now; 
     Login1.RememberMeSet = false; 
    } 

} 
+1

, но как насчет того, если они не установили флажок? не все ли получат эту настройку? – chobo2

+0

Да, извините, я неправильно прочитал ваш вопрос - я обновлю свой ответ, чтобы ответить на ваш конкретный вопрос ... –

+0

Я думаю, что если бы я просто установил такие вещи, как у вас, в web.config, но отключите скользящее окончание, тогда я получу то, что я хотеть. – chobo2

16

Добавить хэш-ключ или случайную строку как для файла cookie, так и для базы данных (оба ключа). Если значение cookie и базы данных одинаково, когда пользователь начинает новый сеанс, снова подпишите его/ее. Когда пользователь достигнет двух недель, удалите секретный ключ из базы данных с помощью cronjob (Unix) или запланированной задачи (Windows).

Предупреждение: Не полагайтесь на дату истечения срока действия файла cookie, так как люди могут взломать свой браузер.
Правило: НИКОГДА, НИКОГДА не доверяйте никому из ваших пользователей!

+0

Не могли бы вы объяснить, как хэширование случайной строки повышает безопасность вашего решения? Если хэш случайной строки сохраняется как в базе данных, так и в файле cookie, разве это не так, как хранение случайной строки как в базе данных, так и в файле cookie? – rinogo

+0

Я использую хэш-ключ и случайную строку синонимом. – 2010-12-10 23:43:18

2

Просто используйте простой файл cookie с датой истечения 2 недель.

+2

Безусловно, самый простой способ - но и самый легкий взломать. –

+0

Незначительная точка, но это не «cookie» сеанса, если у него установлен срок годности. Это «постоянный» куки-файл. – MrWhite

+0

@ w3d согласен. Исправлено –