Здравствуйте! Сегодня: Вт, 29 Сен 2020, Ваш IP: 75.101.220.230 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Web-программирование
+ Создать новую тему Страница: 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · > · >> · [17]
Тема: Web · +  +    в избранномx2 дата добавления: 18.10.2013 / 20:29
Автор темы:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Как сделать форму регистрации а точнее сам функционал? на чем?
Технологии: ASP .NET, Visual Basic .NET
--
Du Main Du BA DU
 
Ответ # 1 # · +x1 +  дата добавления: 19.10.2013 / 11:55
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


В ASP .NET можно использовать Membership. Стандартный Membership довольно странный, в идеале его нужно переделывать (наследоваться от стандартных классов и написать свой код, структуру базы).

Есть утилита, которая позволяет создавать таблицы и процедуры в базе для стандартного Membership. Запустить её можно через Пуск -> Выполнить:
%WINDIR%\Microsoft.Net\Framework\%Framework .NET Version%\aspnet_regsql.exe
Вместо %WINDIR% - путь к папке Windows.
Вместо %Framework .NET Version% - папка нужной версии .NET Framework (см. список в %WINDIR%\Microsoft.Net\Framework\).

Если все сделано правильно, то в базе появится много всякого го.. бесполезного хлама. Но в принципе, все это го.. вполне можно использовать для работы с Membership.

Нужно будет настроить web.config, прописать там параметры Membership-а. Прописать строку соединения с базой данных.
<configuration> 
 <connectionStrings>
 <add name="SecurityTutorialsConnectionString" 
 connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SecurityTutorials.mdf;Integrated Security=True;User Instance=True" 
 providerName="System.Data.SqlClient"/>
 </connectionStrings> 
 <system.web>
 <membership defaultProvider="SecurityTutorialsSqlMembershipProvider">
 <providers>
 <add name="SecurityTutorialsSqlMembershipProvider" 
 type="System.Web.Security.SqlMembershipProvider"
 connectionStringName="SecurityTutorialsConnectionString"
 enablePasswordRetrieval="false"
 enablePasswordReset="true"
 requiresQuestionAndAnswer="true"
 applicationName="SecurityTutorials"
 requiresUniqueEmail="true"
 passwordFormat="Hashed"
 maxInvalidPasswordAttempts="5"
 minRequiredPasswordLength="7"
 minRequiredNonalphanumericCharacters="1"
 passwordAttemptWindow="10"
 passwordStrengthRegularExpression=""/>
 </providers>
 </membership>
 ... остальной код конфигурации приложения ... 
 </system.web>
</configuration> 

В ASP .NET WebForms есть готовые элементы для управления учетными записями. Для авторизации: <asp:Login />.

Но, как я говорил, качество готовых механизмов в ASP .NET оставляет желать лучшего. Слишком все громоздко и не поворотливо, да еще непонятно по каким стандартам сделано. Лучше сделать свой Membership, на основе стандартного.

Несмотря на то, что стандартный Membership сделан чтобы облегчить жизнь программистам, тема довольно сложная.

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

Для своего велосипеда, нужно сделать в базе таблицу. Например, users. Поля:
id_users - числовой счетчик;
email - строка, содержащая майл пользователя, который будет использоваться для авторизации;
password - пароль, можно хранить как есть, в голом виде. В плане безопасности особого значения это не имеет, если сервер взломают, то все данные окажутся в руках злоумышленника. Но в идеале, пароли в голом виде лучше не хранить, можно записать, например хеш (md5, sha1);
nickname - отображаемое имя пользователя;
ip - апишник пользователя;
date_created - дата регистрации;
... другие нужные данные.

Собственно в базе больше ничего делать не нужно.

Теперь в коде ASP .NET нужно будет написать функционал для проверки и авторизации пользователя.

Проверять авторизированность пользователя можно через Session:
If Session("UserId") Is Nothing Then
  'это гость
Else
  'это пользователь
End If

Если пользователь не авторизирован (т.е. гость), то ему нужно показывать форму входа. Форма должна состоять как минимум их двух полей: E-Mail и пароль, а также кнопки:
E-Mail: <asp:TextBox ID="tbEmail" runat="server" /><br />
Пароль: <asp:TextBox ID="tbPassword" runat="server" /><br />
<asp:Button ID="btnEnter" runat="server" Text="Вход" />

После нажатия на кнопку, необходимо проверить существование пользователя в базе по указанным E-Mail и паролю.
Если пользователь существует, нужно сделать Session:
Session("UserId") = 123 'идентификатор пользователя из базы
Session("Nickname") = "Вася" 'имя пользователя из базы
... другие нужные данные, но не слишком много, т.к. Session хранится в памяти сервера и чем больше данных, тем больше будет расходоваться памяти

Для регистрации, соответственно, форма будет немного больше. Нужно будет проверять уникально E-Mail, чтобы в базе не было дубликатов. После регистрации, создавать Session не обязательно, но будет неплохо отправить пользователю письмо с регистрационной информацией, или же реализовать механизм активации учетной записи.

Также нужно будет сделать механизм восстановления пароля.

Это самый простой вариант, в общих чертах.
 
Ответ # 2 # · +  +  дата добавления: 19.10.2013 / 18:48
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


CREATE TABLE first_users_base(id integer, user_name text, mail text, pass text, nickname text, user_ip а какой тип тут казать??);
--
Du Main Du BA DU
 
Ответ # 3 # · +x1 +  дата добавления: 19.10.2013 / 19:07
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Нет, запрос не такой. Это что-то на Access похоже.

Нужен SQL Server, т.к. Access просто не справится с нагрузкой на сайт.

Вместо id лучше писать id_[имя таблицы], т.к. в таблице могут быть ссылки на другие id, работать будет удобней.

CREATE TABLE users (id_users int identity primary key, user_name nvarchar(100), email nvarchar(100), nickname nvarchar(100), ip varchar(15));
identity - счетчик, может быть только один в одной таблице.
primary key - ключевое поле.

nvarchar - строка юникод.
varchar - обычная строка, не юникод.
В скобках - размер строки (максимальное количество символов).
Если в скобках написать max, то размер строки будет практически безграничным. Например: biography nvarchar(max), в данном случае будет текстовое поле "безграничного" размера с именем biography.

user_name - типа логин, как на Kbyte.Ru? На Kbyte.Ru такой метод является ошибочным и идет с древних времен, еще с начала 2000-х годов :) Устарело. Сейчас, чем проще пользователю будет, тем лучше. Т.е. нужно стараться не грузить пользователя лишними данными. Вместо логина удобно использовать E-Mail.
 
Ответ # 4 # · +  +  дата добавления: 19.10.2013 / 19:30
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Я выполнил данную команду а что должно произойти дальше??:DD
--
Du Main Du BA DU
 
Ответ # 5 # · +x1 +  дата добавления: 19.10.2013 / 19:42
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


В базе данных должна появиться таблица users

 
Ответ # 6 # · +  +  дата добавления: 19.10.2013 / 20:00
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Спасибо Алексей, я обновлял у меня её не было, вот перезашел появилась, а теперь к самой теме. Какой проект создать?

Вот подкаталоги из каталога Framework
--
Du Main Du BA DU
 
Ответ # 7 # · +  +  дата добавления: 19.10.2013 / 20:18
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


.NET Framework 4.0
Веб-приложение ASP .NET.
 
Ответ # 8 # · +  +  дата добавления: 19.10.2013 / 20:41
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Вот такой код?
точнее такой
<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="SecurityTutorialsConnectionString"
    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SecurityTutorials.mdf;Integrated Security=True;User Instance=True"
    providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <membership defaultProvider="SecurityTutorialsSqlMembershipProvider">
      <providers>
        <add name="SecurityTutorialsSqlMembershipProvider"
        type="System.Web.Security.SqlMembershipProvider"
        connectionStringName="SecurityTutorialsConnectionString"
        enablePasswordRetrieval="false"
        enablePasswordReset="true"
        requiresQuestionAndAnswer="true"
        applicationName="SecurityTutorials"
        requiresUniqueEmail="true"
        passwordFormat="Hashed"
        maxInvalidPasswordAttempts="5"
        minRequiredPasswordLength="7"
        minRequiredNonalphanumericCharacters="1"
        passwordAttemptWindow="10"
        passwordStrengthRegularExpression=""/>
      </providers>
    </membership>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <authentication mode="Windows"/>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
      <namespaces>
        <clear/>
        <add namespace="System"/>
        <add namespace="System.Collections"/>
        <add namespace="System.Collections.Generic"/>
        <add namespace="System.Collections.Specialized"/>
        <add namespace="System.Configuration"/>
        <add namespace="System.Text"/>
        <add namespace="System.Text.RegularExpressions"/>
        <add namespace="System.Web"/>
        <add namespace="System.Web.Caching"/>
        <add namespace="System.Web.SessionState"/>
        <add namespace="System.Web.Security"/>
        <add namespace="System.Web.Profile"/>
        <add namespace="System.Web.UI"/>
        <add namespace="System.Web.UI.WebControls"/>
        <add namespace="System.Web.UI.WebControls.WebParts"/>
        <add namespace="System.Web.UI.HtmlControls"/>
      </namespaces>
    </pages>
  </system.web>
</configuration>
--
Du Main Du BA DU
 
Ответ # 9 # · +  +  дата добавления: 19.10.2013 / 20:53
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А зачем тогда таблица users?

Если собрался использовать стандартный Membership, то все таблицы будут созданы утилитой aspnet_regsql.exe.
По идее и код конфигурации она тоже должна выдать.
 
Ответ # 10 # · +  +  дата добавления: 19.10.2013 / 20:55
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Я думал это мы делаем для одно чего-то раз на то пошло лучше буду юзать users
Но что теперь с кофигом? или мне вообще теперь asp.net сейчас не нужен?
--
Du Main Du BA DU
 
Ответ # 11 # · +  +  дата добавления: 19.10.2013 / 21:11
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


В конфиге нужно только строку соединения с базой данных прописать, а сотальное можно оставить по умолчанию, как было изначально (после создания проекта).

Строка соединения с базой указывается в секции connectionStrings:
<connectionStrings>
  <remove name="LocalSqlServer"/>
  <add name="LocalSqlServer" connectionString="Data Source=адрес sql-сервера;Initial Catalog=crash;user id=crash;password=пароль;" />
</connectionStrings>
Имя строки соединения с базой - LocalSqlServer.

Кад работы с данными примерно такой (это только выборка, для других типов действий, SQL-запрос и методы могут отличтаться):
'серверный код

'создаем соединение с базой данных
Dim myConn As New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)

'открываем соединение с базой
myConn.Open()

'создаем команду
Dim myCmd As New  System.Data.SqlClient.SqlCommand()
'передаем команде соединение с базой
myCmd.Connection = myConn
	'пишем команду (sql-запрос)
	myCmd.CommandText = "SELECT * FROM users" 'получить все значения из таблицы users
'создаем адаптер (только для получения целых таблиц данных)
Dim DA As New System.Data.SqlClient.SqlDataAdapter(myCmd) ' передаем адаптеру команду
'создаем DataSet
Dim DS As New System.Data.DataSet()
'выполняем команду через адаптер и передаем таблицы в DataSet
DA.Fill(DS)
'у нас будет (в результатах) одна таблица, выводим строки из нее
For Each row As System.Data.DataRow In DS.Tables(0).Rows
  Response.Write(row("id_users"))'выводим поле id_users
  Response.Write(" | ")
  Response.Write(row("nickname"))'выводим поле nickname
  Response.Write("<br />")
Next

'не забываем закрывать соединение, иначе лимит закончится и доступ к базе временно пропадет
myConn.Close()
 
Ответ # 12 # · +  +  дата добавления: 19.10.2013 / 21:16
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Извините, а где мы пишем сам vb.net код? там ведь только html и xml?
--
Du Main Du BA DU
 
Ответ # 13 # · +x1 +  дата добавления: 19.10.2013 / 21:30
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Каждая страница состоит из файлов .aspx и .vb.
В файлах .aspx указывается html и серверные элементы, +может быть vb-код, но не рекомендуется.
Серверный (vb) код нужно писать в файлах .vb.



Все примерно также, как в Windows Forms.

Страница - это как форма. У нее есть события, основное - Load:
Partial Class _Default
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

  End Sub

End Class

У всех серверных элементов тоже есть события.
Серверные элементы ASP размещаются на странице (.aspx), теги серверных элементов ASP начинаются с префикса asp:
<asp:Button ID="Button1" runat="server" Text="Это серверная кнопка ASP" />
Но вообще, любой html-элемент можно сделать серверным, достаточно добавить атрибут runat="server" и идентификатор (id - это аналог Name из Windows Forms):
<h1 id="заголовок" runat="server">к этому заголовку можно будет обращаться через код vb</h1>
В данный момент тебе лучше ограничиться серверными элементами ASP (те что с префиксом asp).

В режиме конструктора, элементы asp можно добавлять визуально, как в Windows Forms.
 
Ответ # 14 # · +  +  дата добавления: 19.10.2013 / 22:00
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Ок, допустим я всё сделал то как мне это запихнуть в шаблон который я сверстал?:)
--
Du Main Du BA DU
 
Ответ # 15 # · +  +  дата добавления: 19.10.2013 / 22:12
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


<add name="LocalSqlServer" connectionString="Data Source=адрес sql-сервера;Initial Catalog=crash;user id=crash;password=пароль;" />
А что тут за пароль?
--
Du Main Du BA DU
 
Ответ # 16 # · +  +  дата добавления: 19.10.2013 / 22:22
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Ок, допустим я всё сделал то как мне это запихнуть в шаблон который я сверстал?:)
Для шаблонов лучше использовать MasterPage - это тоже что и aspx, только специально для шаблонов. Чтобы не делать отдельную верстку для каждой страницы.



Всю верстку нужно разместить в MasterPage.

В MasterPage нужно оставить блоки, в которых будет контент. По умолчанию должно быть создано два блока - head и блок для контента, но их может быть сколько угодно (точнее, сколько нужно).

При добавлении новых страниц в проект, нужно поставить опцию "Выбрать главную страницу" (после того, как шаблон будет сделан):
 
Ответ # 17 # · +  +  дата добавления: 19.10.2013 / 22:23
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А что тут за пароль?
В строке соединения нужно указывать:
- Адрес сервера SQL Server
- Имя пользователя SQL Server
- Пароль доступа к SQL Server
- Имя базы данных SQL Server
 
Ответ # 18 # · +  +  дата добавления: 19.10.2013 / 22:26
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Но мы ведь делаем форму регистрации, а не авторизации то есть пароль мы получим до этого мы его не знаем?
--
Du Main Du BA DU
 
Ответ # 19 # · +  +  дата добавления: 19.10.2013 / 23:04
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Тупанул вообщем:)
--
Du Main Du BA DU
 
Ответ # 20 # · +  +  дата добавления: 19.10.2013 / 23:07
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Но мы ведь делаем форму регистрации, а не авторизации то есть пароль мы получим до этого мы его не знаем?
Учетные записи будут храниться в базе данных. Помимо учетных данных пользователей, в базе могут храниться статьи, анекдоты, веселые картинки, координаты расположения Луны относительно Земли, информация о погоде, курсы валют, номера телефонов и т.д. и т.п.

Для работы с базой данных SQL Server, программисту (а также некоторым товарищам из АНБ) нужно знать:
- Адрес сервера SQL Server;
- Имя пользователя SQL Server;
- Пароль доступа к SQL Server;
- Имя базы данных SQL Server.


Ты делаешь розовый пятиугольник.
 
Страница: 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · > · >> · [17] + Создать новую тему