ASP.NET MVC RememberMe

После поиска много я не получил ответов, и наконец я должен был возвратиться к Вам. Ниже я объясняю свою проблему подробно. Это слишком длинно, поэтому не выходите из чтения. Я объяснил свою проблему на простом языке.

Я разрабатывал asp.net mvc проект. Я использую стандартные роли ASP.NET и членство. Все хорошо работает, но помнить меня функциональность не работает вообще. Я перечисляю все подробности работы. Надеюсь Вы, парни могут выручить меня, решают эту проблему.

Мне просто нужно это:

Мне нужен пользователь для входа в систему в веб-приложение. Во время входа в систему они могут или войти в систему с, помнят меня или без него. Если пользователь входит в систему с, помнят меня, я хочу, чтобы браузер помнил их в течение долгого времени, скажем, по крайней мере одного года или значительно долгого времени. Путем они делают это в www.dotnetspider.com,www.codeproject.com,www.daniweb.com и многих других сайтах. Если пользователь входит в систему без, помнят меня, то браузер должен предоставить доступ к веб-сайту в течение приблизительно 20 - 30 минут и после который должна истечь их сессия. Их сессия должна также истечь, когда пользователь входит в систему и закрывает браузер без того, чтобы выходить из системы.

Примечание: Я успешно реализовал выше функциональности, не используя стандартные роли asp.net и членство путем составления моих собственных таблиц для пользователя и аутентификации против моей таблицы базы данных, установки cookie и сессий в моих других проектах. Но для этого проекта мы запускающийся с начала использовали стандартные роли asp.net и членство. Мы думали, что это будет работать и после того, как все было сборкой во время тестирования, это просто не работало. и теперь мы не можем заменить существующую функциональность стандартными ролями asp.net и членство с моими собственными пользовательскими таблицами и всем материалом, Вы понимаете то, о чем я являюсь taling.

Или существует некоторая ошибка со стандартными ролями asp.net и функциональностью членства, или у меня есть целое понятие стандартных ролей asp.net и членства неправильно. я заявил, что я хочу выше. Я думаю, что это очень просто и разумно.

Что я сделал

  1. Форма входа в систему с именем пользователя, паролем и помнит меня поле.
  2. Моя установка в web.config:

    <режим аутентификации = "Формы">
    <формы loginUrl = "~/Account/LogOn" тайм-аут = "2880"/>


  3. в Моем действии контроллера у меня есть это:

    FormsAuth. SignIn (имя пользователя, rememberMe);

    общественность освобождает SignIn (представьте в виде строки имя пользователя, bool createPersistentCookie) {FormsAuthentication. SetAuthCookie (имя пользователя, createPersistentCookie);}

Теперь проблемы следуют:

Я уже заявил в вышеупомянутом разделе "I simply need this". пользователь может успешно войти в систему. Их сессия существует для так же минут, как указано в значении тайм-аута в web.config. Я также дал образец своего web.config. В моем samplem, если я установил тайм-аут на 5 минут, затем истекает сеанс пользователя после 5 минут это в порядке. Но если пользователь закрывает браузер, и вновь откройте браузер, пользователь может все еще ввести веб-сайт, не регистрируясь в том, непока время, указанное в "тайм-ауте", не упало в обморок. Скользящее истечение для значения тайм-аута также хорошо работает. Теперь, если пользователь входит в систему с, помнят меня проверенный, сеанс пользователя все еще истекает после 5 минут. Это не хорошее поведение, не так ли?. Я означаю говорить, что, если пользователь входит в систему с, помнят меня, проверил, что его нужно помнить в течение долгого времени, непока он не делает выходит из системы, или пользователь не делает вручную удаляет все cookie из браузера. Если пользователь входит в систему без, помнят меня, проверил, что его сессия должна истечь после того, как значения периода тайм-аута указали в web.config и также если пользователи закрывают браузер. Проблема состоит в том, что, если пользователь закрывает браузер и вновь открыл его, он может все еще ввести веб-сайт без входа в систему.

Я ищу Интернет много по этой теме, но я не мог получить решение. В сообщении в блоге (http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx), сделанный Scott Gu по точно той же теме. Пользователи жалуются на то же самое в своем едином времени комментариев нет никакого легкого решения, поданного г-ном Scott.

Я считал его в следующих местах: http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14/91191.aspx

Я предполагаю, что это - проблема партии пользователей. Как кажутся от сообщения в блоге, сделанного г-ном Scott Gu.

Ваша справка будет действительно цениться.Заранее спасибо.

13
задан animuson 1 February 2012 в 22:36
поделиться

5 ответов

Что вы хотите do имеет другой тайм-аут, когда опция RememberMe отмечена, чем когда она не отмечена. К сожалению, метод SetAuthCookie не позволяет вам установить срок действия вручную, поэтому вам придется сделать это самостоятельно.

Проблема в том, как это сделать?

ASP.NET MVC использует для этого класс FormsAuthentication System.Web.Security, потому что это нетривиально, если вы также хотите поддерживать параметры конфигурации и просмотр без файлов cookie и SSL, но я думаю, что если вы просто сделаете это:

int timeout = rememberMe ? 525600 : 30; // Timeout in minutes, 525600 = 365 days.
var ticket = new FormsAuthenticationTicket(userName, rememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);// Not my line
cookie.HttpOnly = true; // cookie not available in javascript.
Response.Cookies.Add(cookie);

... вы получите базовую версию того, что вам нужно.

ПРИМЕЧАНИЕ. Я не тестировал этот код.

26
ответ дан 1 December 2019 в 19:30
поделиться

Кевин и Дэйв, вы молодцы, чувак.

Дэйв, в дополнение к твоему коду мне пришлось добавить еще одну строчку, чтобы он заработал. Я хочу, чтобы это запомнилось хотя бы на год. Мне пришлось присвоить значение cookie.Expires в дополнение к вашему коду, чтобы он работал. Если эта строка cookie.Expires не установлена, cookie теряется после перезагрузки компьютера, я имею в виду в конце сеанса. Заметил это в FireFox. Я просмотрел детали cookie и обнаружил: Если cookie.Expires не установлен, тогда значение атрибута «Expires:» в Firefox равно «В конце сеанса», но если cookie.Expires установлен, тогда значение «Expires» Атрибут: "в Firefox соответствует дате, когда было установлено значение cookie.Expires.

Вот код:

int timeout = createPersistentCookie ? 525600 : 2; // Timeout in minutes,525600 = 365 days
var ticket = new FormsAuthenticationTicket(userName,createPersistentCookie,timeout);            
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);//My Line
HttpContext.Current.Response.Cookies.Add(cookie);

Спасибо, ребята, это действительно отличное решение.

4
ответ дан 1 December 2019 в 19:30
поделиться

Это не проблема, это особенность :)

Сессия пользователя еще не истекла, поэтому, даже если он закроет и снова откроет браузер, cookie все еще будет работать.

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

1
ответ дан 1 December 2019 в 19:30
поделиться

Я реализовал то же самое, и когда я тестировал его, он отлично работал в Mozila, но не работал в IE8 для всех компьютеров, у меня также был обновлен параметр для приема файлов cookie в IE, но он все еще не работает.

Internet Explorer 8.x

  1. Щелкните меню «Инструменты».
  2. Выберите в меню Свойства обозревателя - откроется новое окно.
  3. Щелкните вкладку «Конфиденциальность» в верхней части окна.
  4. Щелкните кнопку окна по умолчанию.
  5. Переместите ползунок на один из уровней ниже Среднего Высокого (включая Средний, Низкий, Принять все файлы cookie).
  6. Сохраните изменения, нажав ОК.
  7. Теперь вы можете добавлять товары в корзину.
0
ответ дан 1 December 2019 в 19:30
поделиться

Просто небольшое примечание об использовании билета авторизации членства в общей среде для всех, кто может попасть сюда с этой проблемой. У меня есть mvc-сайт, запущенный на godaddy, и я не могу запомнить меня. Это было решение:

<system.web>
<machineKey
  validationKey="4C6404A3B305CD6E8CFEAC258F042FB95E45E9C3C2CEC3AAB838996CFBE661E41DF1A1BAC75B9B45E02147612FD9B71CA74DDA50B0D0D6ED11F0BB8E31048953"
  decryptionKey="BC471CF17A97B08A9DF85C7B502AD95680E3BE4418FD9C6CEA57E7F97ED64291"
  validation="SHA1" decryption="AES"
/>

Благодаря: http://www.geekfreeq.com/aspnet-remember-me-option-forms-authentication-not-working/

4
ответ дан 1 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: