Проверка входа на каждой странице ASP с использованием аутентификации через переменные сеанса (без forms / windows)?

#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, как сказал вакас раджа.

Надеюсь, это поможет.