После поиска много я не получил ответов, и наконец я должен был возвратиться к Вам. Ниже я объясняю свою проблему подробно. Это слишком длинно, поэтому не выходите из чтения. Я объяснил свою проблему на простом языке.
Я разрабатывал 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 и членства неправильно. я заявил, что я хочу выше. Я думаю, что это очень просто и разумно.
Что я сделал
в Моем действии контроллера у меня есть это:
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.
Ваша справка будет действительно цениться.Заранее спасибо.
Что вы хотите 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);
... вы получите базовую версию того, что вам нужно.
ПРИМЕЧАНИЕ. Я не тестировал этот код.
Кевин и Дэйв, вы молодцы, чувак.
Дэйв, в дополнение к твоему коду мне пришлось добавить еще одну строчку, чтобы он заработал. Я хочу, чтобы это запомнилось хотя бы на год. Мне пришлось присвоить значение 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);
Спасибо, ребята, это действительно отличное решение.
Это не проблема, это особенность :)
Сессия пользователя еще не истекла, поэтому, даже если он закроет и снова откроет браузер, cookie все еще будет работать.
Именно истечение срока действия куки делает сессию пользователя недействительной.
Я реализовал то же самое, и когда я тестировал его, он отлично работал в Mozila, но не работал в IE8 для всех компьютеров, у меня также был обновлен параметр для приема файлов cookie в IE, но он все еще не работает.
Internet Explorer 8.x
Просто небольшое примечание об использовании билета авторизации членства в общей среде для всех, кто может попасть сюда с этой проблемой. У меня есть 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/