#c# #asp.net #forms #authentication #session-variables
#c# #asp.net #формы #аутентификация #переменные сеанса
Вопрос:
Я разрабатываю веб-сайт (в отличие от веб-приложения (поэтому глобального файла нет)). Я не хочу использовать проверку подлинности forms / Windows или файлы cookie. Итак, я выбрал session[] variables.
вопрос:
Как проверить каждую страницу в приложении, существует ли эта переменная session[]?
Какой-либо глобальный класс, в который может быть включена функция проверки и вызываться каждый раз при выполнении page_load?
Комментарии:
1. Почему бы вам не воспользоваться
Global.asax
file?2. Согласен с Waqas Raja — вы все еще можете использовать global.asax в проекте веб-сайта — это не относится исключительно к проектам веб-приложений.
Ответ №1:
Технически говоря, если вы не используете состояние сеанса без использования cookies, переменные сеанса становятся возможными с помощью файлов cookie, так что вы все равно используете их косвенно 😉
В любом случае, это так просто, как вы заявили. Вы можете просто включить некоторый код для проверки существования переменной сеанса в page_load каждой страницы:
if (Session["mySessionVar"] == null
|| Session["mySessionVar"] IS_NOT_VALID)
Response.Redirect("/path/to/login/form/");
IS_NOT_VALID представляет собой некоторый логический тест для проверки того, что данные в переменной действительно являются действительными данными.
Чтобы иметь «глобальный класс», вам нужно создать новый класс page, который наследуется от Page и выполняет проверку в вашем методе new classes Page_Load. Хитрость в том, что каждая страница, на которой вы хотите проверять переменную сеанса, должна быть производной от вашего нового класса, а не от класса Page. Страницы, которые не нуждаются в проверке, могут наследоваться от Page как обычно. Например, что-то вроде этого:
public class MyPageClass : Page
{
protected override void OnLoad(EventArgs e)
{
// Check to see if the session is valid
// and redirect to login if not
if (Session["mySessionVar"] == null
|| Session["mySessionVar"] IS_NOT_VALID)
Response.Redirect("/path/to/login/form/");
base.OnLoad(e);
}
}
public partial class MyLoginRequiredPage : MyPageClass
{
.
.
.
}
Комментарии:
1. Каким бы громоздким это ни было, оно выполняет именно то, что просил Ranjanmano. Вы можете немного упростить это, указав базовый тип в web.config: <system.web><pages pageBaseType=»MyPageClass» /></system.web>
2. Различное получение базовых классов — действительно классная идея! Спасибо kiddailey!
Ответ №2:
Если у вас есть отдельная главная страница для домашней страницы / страницы профиля (отличная от входа), вы можете писать код только на главной странице page_load, поэтому вам не нужно писать код для действительного пользователя на каждой странице. Код:
if (Session["adminid"] == null || Session["adminid"].ToString() == "")
{
Response.Redirect("adminlogin.aspx");
}
Даже вы также можете использовать глобальный файл.asax, как сказал вакас раджа.
Надеюсь, это поможет.