Member 4756577 Ответов: 1

Как получить доступ к значениям сеанса, когда он заполнен датируемыми значениями?


может ли кто-нибудь из вас, пожалуйста, заглянуть в мой код [Asp.net C#]. Поскольку я полностью потерялся в нем...

В основном сценарий таков ...как только пользователь аутентифицируется, система извлекает права пользователя из БД, и права пользователя могут быть кратными. Поэтому я хочу сохранить переменную сеанса. вот что я сделал .. у меня есть datatable и SQLadopter, и я заполняю datatable. После этого я назначил полную datatable переменной сеанса. Пожалуйста, дайте мне знать, как получить несколько значений из переменной сеанса на одной странице, а также на другой странице.

Что я уже пробовал:

strQryToChkUsrRights = "SELECT HaveRightFor AS [Have Right For] FROM ProjectUserRights WHERE (UserID = " + Session["User_ID"].ToString() + ")";
                    SqlCommand SQLComndToChkUserRights = new SqlCommand(strQryToChkUsrRights, conLog);
                    SQLComndToChkUserRights.CommandType = CommandType.Text;

                    SqlDataAdapter adapter = new SqlDataAdapter(SQLComndToChkUserRights);
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    
                    if (dt.Rows.Count>1)
                    {
                        Session["S_User_Rights"] = dt;

                        if (Session["S_User_Rights"] != null)
                        {

                            lblError.Text = "Its okay"; 
                            return;
                        }
                        else
                        {
                            lblError.Text = "Its an error";
                            return;
                        }
                    }
                    else
                    {
                        lblError.Text = "User Rights Not Defined, Please Contact Your Software Developer";
                        return;
                    }

1 Ответов

Рейтинг:
2

MadMyche

Первое, что нужно сделать - избавиться от уязвимости SQL - инъекции. НИКОГДА постройте запрос, используя связку строк, собранных вместе.

string SessionUserID = Session["User_ID"].ToString();
if (SessionUserID != null) {
  string strQryToChkUsrRights = "SELECT HaveRightFor FROM ProjectUserRights WHERE (UserID = @UserID)";

  SqlCommand SQLComndToChkUserRights = new SqlCommand(strQryToChkUsrRights, conLog);

  SQLComndToChkUserRights.Parameters.AddWithValue("@UserID",SessionUserID);

  SQLComndToChkUserRights.CommandType = CommandType.Text;

Теперь, когда мы об этом позаботились... Вы можете получить содержимое сеанса обратно в свой datatable.
if (Session["S_User_Rights"] != null) {
  DataTable HasRightsFor  = (DataTable)Session["S_User_Rights"];
  // and continue on
}

Лично я бы просто использовал IEnumerable<list>, который позволил бы вам легче проверять через LINQ.