Использование файлов cookie для автоматического входа пользователя в asp.net (пользовательский вход)

Я не могу найти в сети то, что ищу, поэтому любая помощь будет принята с благодарностью. Я реализовал форму настраиваемого входа, в которой пользователь вводит свой адрес электронной почты и пароль для входа в систему. Затем я запрашиваю базу данных с этими учетными данными (пароль хешируется и обрабатывается), и если оба найдены, я сохраняю UserID в состоянии Session. Если пользователь закрывает браузер, сеанс теряется, поэтому ему придется снова войти в систему. Я узнал об использовании файлов cookie для реализации функции «Запомнить меня», но я не знаю, что мне следует хранить в файле cookie для процесса автоматического входа и сделать его безопасным.

PS: Я знаю, что такое cookie и как они работают. Я также знаю, что НЕ рекомендуется хранить учетные данные пользователя (адрес электронной почты + пароль) в файле cookie. Я использую asp.net 4.0 с C #

На самом деле я ищу логику системы автоматического входа с использованием файлов cookie.

Спасибо!


person osmiumbin    schedule 17.02.2013    source источник


Ответы (3)


Для установить cookie:

FormsAuthentication.SetAuthCookie(theUserID, true); 

А потом вернуть:

string userId = HttpContext.Current.User.Identity.Name;

Если вы беспокоитесь о безопасности, вы можете рассмотреть возможность использования только безопасных файлов cookie (вы сможете читать эти файлы cookie только через https).

Более подробная информация об этом содержится в соответствующем сообщении: Ручное управление доступом в ASP. Нетто

Обновление: Согласно вашему комментарию, вы не думаете, что можете установить файл cookie проверки подлинности с помощью форм в своей пользовательской форме входа. Итак, я создал пустой проект ASP.NET 4, в котором я создал собственный логин - он будет входить в систему любого неаутентифицированного пользователя. Вот три части:

web.config (в вашем проекте должно быть что-то подобное, поскольку на вашем сайте есть форма, в которой люди входят в систему):

<authentication mode="Forms"></authentication>

Кодовый фронт:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="emptyWebApp._default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     Username: <asp:Label ID="_username" runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

Код позади:

using System;
using System.Web;
using System.Web.Security;

namespace emptyWebApp
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                _username.Text = HttpContext.Current.User.Identity.Name;
            }
            else
            {
                _username.Text = "Not logged in";
                FormsAuthentication.SetAuthCookie("CookieMan", true);
            }
        }
    }
}

Как видите, вы можете установить файл cookie аутентификации, используя FormsAuthentication.SetAuthCookie в вашей собственной функции аутентификации, даже такой иррациональной, как эта.

В этом случае, когда они впервые попадают на страницу, отображается Username: Not logged in, а затем они регистрируются как «CookieMan». При обновлении страницы будет отображаться Username: CookieMan.

person MikeSmithDev    schedule 17.02.2013
comment
Я использую персонализированную форму входа, так почему вы предлагаете мне FormsAuthentication? - person osmiumbin; 18.02.2013
comment
... потому что это работает? Это установит файл cookie для хранения информации о пользователях, вошедших в систему в данный момент. Попробуй. Хотя, наверное, я бы сохранил электронную почту вместо userId. Я использовал это для своих собственных учетных записей с поставщиками настраиваемых ролей. - person MikeSmithDev; 18.02.2013
comment
@osmiumbin добавил пример. Надеюсь, вы поиграете с этим и увидите, что это хороший и простой способ управлять своим cookie-файлом аутентификации. - person MikeSmithDev; 18.02.2013
comment
хорошо, спасибо, я попробую, но я запутался, почему это лучше, чем другой способ (с использованием HttpCookie): codeproject.com/Articles/31914/ - person osmiumbin; 18.02.2013
comment
@osmiumbin, потому что файл cookie, который он создает, распознается платформой .NET и позволяет использовать такие функции, как User.Identity.IsAuthenticated, <asp:LoginStatus и т. д., а также различные функции контроля доступа (например, простую защиту файлов и страниц для аутентифицированных пользователей только через запись web.config). - person MikeSmithDev; 18.02.2013


Когда бы я ни делал это, я просто составляю какой-нибудь случайный идентификатор "SessionId" и использую это значение.

Если ваш код, вы можете сохранить список пар sessionId / UserId и при необходимости истечь их.

person Andrew Walters    schedule 17.02.2013