Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Web.UI.Page.Session.get'
Я получаю ошибку как
Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Web.UI.Page.Session.get'
Можете ли вы предложить мне восстановить эту проблему в сессии.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Configuration;
using System.Data.SqlClient;
using System.Web.SessionState;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//Onclick Submit Button
[WebMethod(EnableSession = true)]
//[System.Web.Services.WebMethod(EnableSession = true)]
public static string Login(string email, string password)
{
var con = new SqlConnection(ConfigurationManager.ConnectionStrings["blogConnString"].ConnectionString);
con.Open();
string res = "0";
SqlDataReader reader;
string sql = "select uid,username from personal where email='" + email + "' and password='" + password + "'";
SqlCommand cmd1 = new SqlCommand(sql, con);
reader = cmd1.ExecuteReader();
while (reader.Read())
{
res = "1";
Session["UID"] = reader["uid"].ToString(); //error line here
Session["UNAME"] = reader["username"].ToString(); //error line here
}
return res;
con.Close();
}
}
3 ответа
Попробуйте этот код и, пожалуйста, остерегайтесь SQL-инъекций - чтобы предотвратить его, используйте параметризованный запрос следующим образом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Configuration;
using System.Data.SqlClient;
using System.Web.SessionState;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//Onclick Submit Button
[WebMethod(EnableSession = true)]
//[System.Web.Services.WebMethod(EnableSession = true)]
public static string Login(string email, string password)
{
var con = ConfigurationManager.ConnectionStrings["blogConnString"].ConnectionString;
con.Open();
string res = "0";
SqlDataReader reader;
string sql = "select uid,username from personal where email=@Email and password=@Password";
using(SqlConnection connection = new SqlConnection(con))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@Email", SqlDbType.String);
command.Parameters["@Email"].Value = email;
command.Parameters.AddWithValue("@Password", password);
reader = command.ExecuteReader();
while (reader.Read())
{
res = "1";
HttpContext.Current.Session["UID"] = reader["uid"].ToString(); //Either Remove Static from Method Declaration or use HttpContext.Current along with session.
HttpContext.Current.Session["UNAME"] = reader["username"].ToString();
}
}
return res;
con.Close();
}
}
Не делайте ваш метод статичным. Он не должен быть статичным и не позволяет использовать любые нестатические свойства (например, Session
). Сделай это:
public string Login(string email, string password)
{
....
}
Кроме того, не объединяйте запросы SQL, особенно со значениями, которые поступают из пользовательского интерфейса. Это делает вас уязвимым для SQL-инъекций. Используйте SQLParameters.
Вы можете использовать его для вставки переменной в сессию:
HttpContext.Current.Session["UID"] = reader["uid"].ToString();
и не используйте статический
public string Login(string email, string password)
{
}