Сеанс не работает с панелью управления

У меня проблема с сеансом, у меня есть 2 страницы входа, одна для администратора и одна для учителя, когда пользователь вводит свой идентификатор и пароль, сеанс создается для его имени, я использовал этот сеанс в Masterpage, поэтому я могу контролировать появление некоторых панели, показывающие URL-адрес других страниц, но, к сожалению, это не работает, я думал создать другую главную страницу для администратора и учителя, но это плохое решение, где некоторые страницы являются общими между двумя, в любом случае это код сначала на главной странице

protected void Page_Load(object sender, EventArgs e)
{ 

if (Session["fname"] == "admin")
{
    Panel2.Visible = false;
    Panel1.Visible = true;
    Panel3.Visible = false;
}
else if (Session["fname"] == "Teacher")
{
    Panel1.Visible = false;
    Panel2.Visible = true;
    Panel3.Visible = false;

}
else
{
    Panel1.Visible = false;
    Panel2.Visible = false;
    Panel3.Visible = true;
}
}

и на странице входа в систему администратора

string s = "Select ID,Name,Password FROM Admin where ID = '" + TextBox1.Text + "'";
    con.Open();
    SqlCommand cmd = new SqlCommand(s, con);
    SqlDataReader dr;
    dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {
        dr.Read();
        string s1 = dr[2].ToString();
        string s2 = TextBox2.Text;
        if (s1 == s2)
        {
            Session["fname"] = "admin";


            Response.Redirect("ManageCourse.aspx", true);
            Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Login Successful');", true);
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }

И на странице входа в систему учителя

 string s = "Select ID,Name,Password FROM Teacher where ID = '"+TextBox1.Text+"'";
        con.Open();
        SqlCommand cmd = new SqlCommand(s,con);
        SqlDataReader dr;
        dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            dr.Read();
            string s1=dr[2].ToString();
            string s2=TextBox2.Text;
            if (s1 == s2)
            {
                Session["fname"] = "Teacher";


                Response.Redirect("AddQ.aspx", false);
                Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Login Successful');", true);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
            }

и я добавил в webconfig эту строку

 <sessionState mode = "InProc"/>

Желаемый результат, при котором отображается только панель, для которой установлено значение true, но сеансы не работают, а переходят только к последним else, где отображается только панель 3.

Можете описать проблему и желаемый результат? Также я считаю необходимым предупредить вас, что для входа в систему нужно использовать пароль а также. Ваш текущий код очень легко атаковать, и было бы тривиально сбросить все идентификаторы пользователя или даже стереть базу данных. Я мог войти на вашу страницу администратора, просто набрав blah' OR 1 = 1; -- .

Ron Beyer 28.03.2018 17:43

@RonBeyer спасибо за совет, учту. Я изменил свой вопрос сейчас

Sondos 28.03.2018 17:54

Предупреждаю, что объект Cache одинаков для всех пользователей! Возможно, вы захотите использовать Session.

VDWWD 28.03.2018 18:16

@VDWWD извините, это последние изменения, которые я внес, но сначала я попробовал сеанс, и он не работает

Sondos 28.03.2018 18:20

Какова реальная стоимость Session["fname"]? Проверьте это в отладке и работайте в обратном направлении. Может это Admin или teacher или вообще ничего. Если да, то выясните, почему это не то, что вы ожидаете.

VDWWD 28.03.2018 18:27

для лучшего управления сеансом используйте файл класса и используйте httpcurrentcontext вместе с переменной типа сеанса. Установите его значение, используя свойства get set.

Shadow Walker 28.03.2018 19:38

@ShadowWalker извините, я новичок в C# и программировании, что вы имеете в виду, используя файл класса?

Sondos 28.03.2018 23:32

Тогда я должен сначала сказать, как использовать классы в C#, только после этого вы сможете понять мое решение.

Shadow Walker 30.03.2018 11:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
68
1

Ответы 1

Преобразуйте содержимое сеанса в строку. использовать метод ToString ()

if (Сессия ["fname"]. ToString () == "admin")

иначе if (Сессия ["fname"]. ToString () == "Учитель")

Другие вопросы по теме