У меня проблема с сеансом, у меня есть 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.
@RonBeyer спасибо за совет, учту. Я изменил свой вопрос сейчас
Предупреждаю, что объект Cache одинаков для всех пользователей! Возможно, вы захотите использовать Session.
@VDWWD извините, это последние изменения, которые я внес, но сначала я попробовал сеанс, и он не работает
Какова реальная стоимость Session["fname"]? Проверьте это в отладке и работайте в обратном направлении. Может это Admin или teacher или вообще ничего. Если да, то выясните, почему это не то, что вы ожидаете.
для лучшего управления сеансом используйте файл класса и используйте httpcurrentcontext вместе с переменной типа сеанса. Установите его значение, используя свойства get set.
@ShadowWalker извините, я новичок в C# и программировании, что вы имеете в виду, используя файл класса?
Тогда я должен сначала сказать, как использовать классы в C#, только после этого вы сможете понять мое решение.





Преобразуйте содержимое сеанса в строку. использовать метод ToString ()
if (Сессия ["fname"]. ToString () == "admin")
иначе if (Сессия ["fname"]. ToString () == "Учитель")
Можете описать проблему и желаемый результат? Также я считаю необходимым предупредить вас, что для входа в систему нужно использовать пароль а также. Ваш текущий код очень легко атаковать, и было бы тривиально сбросить все идентификаторы пользователя или даже стереть базу данных. Я мог войти на вашу страницу администратора, просто набрав
blah' OR 1 = 1; --.