powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сравнение времени
8 сообщений из 8, страница 1 из 1
Сравнение времени
    #38338213
taaamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После такой штуки
Код: vbnet
1.
If DateDiff(DateInterval.Minute, Now, CType(Server.HtmlEncode(Request.Cookies("Time").Value), Date)) < CType(Server.HtmlEncode(Request.Cookies("Period").Value), Long) Then


Мне выходит ошибка:
Ссылка на объект не указывает на экземпляр объекта.

Не пойму в чем проблема. Помогите пожалуйста
...
Рейтинг: 0 / 0
Сравнение времени
    #38338220
taaamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя проблема глубже. Есть login page. Там проверяется введенные логин и пароль В случае удачи создаются куки и пользователь отправляется на страницу аутентификации с готовыми куками:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Protected Sub Confirm_Click(sender As Object, e As EventArgs) Handles Confirm.Click
        If ua.IsTruePassword(Email.Value, Password.Value) Then
            Dim id As Long
            id = ua.SearchID(Email.Value, Password.Value)

            CriateCookies(id, Email.Value, Password.Value)
            FormsAuthentication.RedirectFromLoginPage(Email.Value, False)
...
End Sub
    Public Sub CriateCookies(Id As Long, email As String, password As String)
        Dim c As New HttpCookie("UserINfo")
        c.Values("Email") = email
        c.Values("ID") = Id
        c.Values("Password") = password
        c.Values("Period") = Web.Configuration.WebConfigurationManager.AppSettings("Period")
        c.Values("Time") = DateTime.Now
        Request.Cookies.Add(c)
    End Sub


Страница аутентификации проверяет срок годности файлов куки и правельность пароля:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Autotentificate()
 End Sub
 Public Sub Autotentificate()

        If (Not Request.Cookies("Email") Is Nothing) And (Not Request.Cookies("Password") Is Nothing) And (Not Request.Cookies("Time") Is Nothing) And (Not Request.Cookies("Period") Is Nothing) Then
            If DateDiff(DateInterval.Minute, Now, CType(Server.HtmlEncode(Request.Cookies("Time").Value), Date)) < CType(Server.HtmlEncode(Request.Cookies("Period").Value), Long) Then
                If ua.IsTruePassword(CType(Request.Cookies("Email").Value, Long), Request.Cookies("Password").Value.ToString) Then

...
End sub


Но на странице аутентификации куку не видно т.к. первый иф не удается пройти. Подскажите пожалуйста - почему такое происходит?
...
Рейтинг: 0 / 0
Сравнение времени
    #38338252
taaamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
изменил
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    Public Sub Autotentificate()

        If Not Request.Cookies("UserInfo") Is Nothing Then
            If DateDiff(DateInterval.Minute, Now, CType(Server.HtmlEncode(Request.Cookies("Time").Value), Date)) < CType(Server.HtmlEncode(Request.Cookies("Period").Value), Long) Then
                If ua.IsTruePassword(CType(Request.Cookies("UserInfo")("Email"), Long), Request.Cookies("UserInfo")("Password")) Then
                    FormsAuthentication.RedirectFromLoginPage(Request.Cookies("UserInfo")("Email"), False, "MyPage.aspx")
                Else
...


ошибок нет, но куку не видит. Не пойму почему
...
Рейтинг: 0 / 0
Сравнение времени
    #38338256
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
taaamerlan, 1) ты создаешь cookie с именем UserINfo, а пытаешься прочитать куки с именами Email, Password, Period и Time. Эти значения являются частью cookie UserINfo. Раз ты записываешь их в коллекцию Values, то и читать нужно оттуда же.

2) чтобы cookie стала доступна при следующем запросе её нужно сохранять в Response - Response.Cookies.Add(c)

3) Самая серьезная твоя ошибка это изобретение собственного механизма аутентификации с хранением пароля в cookie. Так делать нельзя делать ни при каких условиях. Используй стандартную forms authentication. Если тебе нужно сохранять дополнительную информацию о пользователях, то читай о asp.net profiles.
...
Рейтинг: 0 / 0
Сравнение времени
    #38338270
taaamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первые 2 ошибки решил до того, как вы написали. Но спасибо. Третье не счтиаю ошибкой. Правда хранить пароль в куках - это действительно глупо, но лучшего пока не придумал. Менять пока не намерен.
У меня новая проблема. Исправив все так в login aspx
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 Public Sub CriateCookies(Id As Long, email As String, password As String)
        Dim c As New HttpCookie("UserInfo")
        c.Values("Email") = email
        c.Values("ID") = Id
        c.Values("Password") = password
        c.Values("Period") = Web.Configuration.WebConfigurationManager.AppSettings("Period")
        c.Values("Time") = DateTime.Now
        Response.Cookies.Add(c)

    End Sub



и autotentification.aspx
Код: vbnet
1.
2.
3.
4.
5.
6.
   Public Sub Autotentificate()

        If Not Request.Cookies("UserInfo") Is Nothing Then
            If DateDiff(DateInterval.Minute, Now, CType(Server.HtmlEncode(Request.Cookies("UserInfo")("Time")), Date)) < CType(Server.HtmlEncode(Request.Cookies("UserInfo")("Period")), Long) Then
                If ua.IsTruePassword(Server.HtmlEncode(Request.Cookies("UserInfo")("Email").ToString), Server.HtmlEncode(Request.Cookies("UserInfo")("Password")).ToString) Then
                    FormsAuthentication.RedirectFromLoginPage(Server.HtmlEncode(Request.Cookies("UserInfo")("Email")).ToString, False)


Я встретилс с ошибкой в процедуре IsTruePassword.
Вот ее код.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Public Function IsTruePassword(Email As String, password As String) As Boolean
        Dim con As New SqlConnection
        con.ConnectionString = Web.Configuration.WebConfigurationManager.ConnectionStrings("(local)").ConnectionString
        Dim comand As New SqlCommand
        comand.CommandType = Data.CommandType.StoredProcedure
        comand.Connection = con
        comand.CommandText = "[Verify]"
        comand.Parameters.AddWithValue("@Email", Email)
        comand.Parameters.AddWithValue("@Password", password)
        con.Open()
        If IsDBNull(comand.ExecuteScalar) Then
            Return False
        Else
            Return True
        End If
        con.Close()
    End Function


После соединения выводится ошибка - неверный дискриптор. Не пойму что ж не так.
Данную процедуру я вызываю 2 раза (прости меня господи за сей говнокод) в login.aspx отрабатывает правильно, а на странице аутентификации такая ошибка. Что это может означать?
...
Рейтинг: 0 / 0
Сравнение времени
    #38338500
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
taaamerlanПравда хранить пароль в куках - это действительно глупо, но лучшего пока не придумал. Менять пока не намерен.
Хранение пароля в cookie небезопасно. Это неуважение к пользователям сайта. Плюс это непрофессионально. По сути ты говоришь, "я знаю что так делать нельзя, но мне пофиг т.к. лень разбираться как сделать правильно".

Тебе не нужны две страницы. login.aspx и так уже аутентифицирует пользователя и создает соответствующую cookie т.к. ты вызываешь FormsAuthentication.RedirectFromLoginPage.

taaamerlanУ меня новая проблема.
...
Я встретилс с ошибкой в процедуре IsTruePassword.
...
После соединения выводится ошибка - неверный дискриптор.
Похоже проблема в том что ты не закрываешь соединение. Окружи работу с SqlConnection в блок Using.

taaamerlanДанную процедуру я вызываю 2 раза (прости меня господи за сей говнокод) в login.aspx отрабатывает правильно, а на странице аутентификации такая ошибка.
Нет никакой необходимости вызывать её два раза. Сделай всю логику в коде страницы login.aspx.
...
Рейтинг: 0 / 0
Сравнение времени
    #38338920
taaamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile, хорошо. Все переделаю, но вот у меня вопрос - как сделать что-то аля "оставаться на сайте" с помошью куки, но так, что-бы если пароль пользователя обновился, то куки не помогали ему и пользователю пришлось вводить новый пароль?
...
Рейтинг: 0 / 0
Сравнение времени
    #38340714
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
taaamerlan, переделываем код аутентификации чтобы authentication cookie создаваоась вручную (см. классы FormsAuthenticationTicket и FormsAuthentication). В поле UserData записываем дату последнего изменения пароля. Затем пишем http модуль обрабатывающий событие OnAuthorize. Внутри вытягиваем дату из тикета и сравниваем с датой из БД. Если не совпадают, то перенправляем на страницу логина.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сравнение времени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]