Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Я проверил код в файлах, которые Вы отправили мне (еще раз спасибо за отправку их через).
Примечание: Я не протестировал это, так как я не установил базу данных и т.д.
Однако я вполне уверен, это - проблема.
Необходимо установить Свойство MembershipProvider для средств управления ASP.NET. Создание определений для них:
<asp:Login ID="Login1" runat="server"
MembershipProvider="MySqlMembershipProvider">
<LayoutTemplate>
<!-- template code snipped for brevity -->
</LayoutTemplate>
</asp:Login>
И..
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server"
MembershipProvider="MySqlMembershipProvider">
<WizardSteps>
<asp:CreateUserWizardStep runat="server" />
<asp:CompleteWizardStep runat="server" />
</WizardSteps>
</asp:CreateUserWizard>
Это затем связывает средства управления с Поставщиком Членства с именем (который Вы указали в сети. Конфигурация.
Дайте этому водоворот в своем решении и сообщите мне, как Вы преуспеваете. Я надеюсь, что это работает на Вас :)
Я должен также добавить, я знаю, что Вы не должны должны быть делать это, поскольку поставщик по умолчанию установлен, но у меня были проблемы в прошлом с этим.. Я закончил тем, что установил их всех на руководство, и все хорошо работали.
Какова роль имени пользователя, с которым Вы входите в систему? Вы разрешили эту роль к доступу Default.aspx?
Я испытал это однажды (давным-давно) и пошел "doh!" когда я понял, что даже администраторские роли не могут получить доступ к основной папке!
У Вас обычно есть начальная папка с обычно доступными формами, и отдельная папка со всем входом в систему защитила объекты. В начальной папке у Вас есть webconfig с:
<!--Deny all users -->
<authorization>
<deny users="*" />
</authorization>
В другой папке можно поместить отдельный webconfig с настройками как:
<!--Deny all users unless autherticated -->
<authorization>
<deny users="?" />
</authorization>
Если Вы хотите далее совершенствовать его, можно предоставить доступ к конкретной роли только.
<configuration>
<system.web>
<authorization>
<allow roles="Admins"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
Это запретит доступа любому, у кого нет роли администратора, которого они могут только получить, если они зарегистрированы успешно.
Если Вы хотите некоторый хороший фон, я рекомендую телевизионный эпизод DNR с Miguel Castro на Членстве ASP.NET
Мне не нравится данный взлом.
У меня есть сайт, который использует форму входа в систему, названную "login.aspx", и все хорошо работает. Я думаю, что мы должны на самом деле найти ответ, а не взлом. Начиная со всей [по-видимому], протестированной работы сайтов. Разве Вы не думаете, что мы должны на самом деле использовать StackOverflow для нахождения ФАКТИЧЕСКОЙ проблемы? (создание его намного более полезный, чем где-нибудь еще?)
В LoginCtl_Authenticate событие Вы устанавливающий EventArgs. Аутентифицируемое свойство к истинному?
например.
protected void LoginCtl_Authenticate(object sender, AuthenticateEventArgs e)
{
// Check the Credentials against DB
bool authed = DAL.Authenticate(user, pass);
e.Authenticated = authed;
}
Я столкнулся с подобной проблемой только что, и я помню, что она была решена, не назвав страницу входа в систему "login.aspx". Просто назвав его что-то еще (userLogin.aspx, например) решило его для меня.
Вы проверили, что путь перенаправления отправляется в форму входа в систему? От моей головы я думаю, что это - ReturnURL?
@Jon: я еще не использую роли. Если я проверяю веб-Административное средство, оно говорит: Роли не включены.
@Rob: Да, это там.
Я также проверил события в порядок: LoggingIn, Пройдите проверку подлинности, LoggedIn, таким образом, он следует за корректным путем, но никакое перенаправление и он не видят, что он аутентифицировался.
Вы имеете requireSSL="true"
в Вашем web.config? У меня были подобные признаки Вам. При установке requireSSL на истинный существуют некоторые дополнительные соображения.
@Rob: Вы правы со своей точки зрения.
С моей точки зрения это - мой тестовый проект проверить некоторые вещи. Если это работает всегда, который соответствует мне. Я не нашел подобной проблемы в сети, таким образом, это может быть что-то еще, абсолютно не связанное с ASP.NET.
Однако я открыт, так, чтобы в следующий раз я также мог сказать: ага, я знаю это!
Я запустил по проекту:
Default.aspx: добавленные средства управления LoginStatus и LoginName
Login.aspx: добавленное управление Управлением входом в систему и CreateUserWizard
web.config: добавленный
<authentication mode="Forms">
<forms name="SqlAuthCookie" timeout="10" loginUrl="Login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
<membership defaultProvider="MySqlMembershipProvider">
<providers>
<clear/>
<add name="MySqlMembershipProvider" connectionStringName="MyLocalSQLServer" applicationName="MyAppName" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>
и
<connectionStrings>
<add name="MyLocalSQLServer" connectionString="Initial Catalog=aspnetdb;data source=iballanb\sqlexpress;uid=full;pwd=full;"/>
</connectionStrings>
Создайте базу данных с aspnet_regsql -E -S iballanb\sqlexpress -A all
, созданный пользователь SQL, названный полным полного пароля.
Запустите проект, я был перенаправлен к Login.aspx, создайте одного пользователя, он создается в базе данных. Ввод пользовательских данных для входа в систему в форму, ловля событий: LoggingIn, Пройдите проверку подлинности, LoggedIn, таким образом, я зарегистрирован (я ничего не делаю в этих событиях, я не аутентифицирую меня, я только интересуюсь тем, что запущено и который порядок). RedirectURL правильно указывает на Default.aspx, но не имеет никакого эффекта.
Это - это до сих пор.
При переопределении событий Вы называете реализацию по умолчанию? Если Вы переопределите их для подтверждения их выполнения, то фактический код не будет становиться выполняемым также, который может быть перерывом в инфраструктуре..
Я только что решил эту проблему. Проверьте applicationName для своего поставщика услуг членства. http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers .aspx