HttpResponse при попытке сделать cookie в C#
Ошибка: имя "Response" не существует в текущем контексте, когда я пытаюсь использовать Response.Cookies.Add(cookie);
Я не уверен, что еще мне нужно включить, чтобы это заработало. Я создаю приложение, в котором пользователь может войти в систему, и когда они входят в систему, создается cookie, чтобы им не нужно было входить снова, когда они снова открывают приложение.
using MySql.Data.MySqlClient;
using System.Web;
namespace login
{
public partial class Form1 : Form
{
MySqlConnection konekcija;
string baza = "host=localhost;database=test;user=root;password=";
MySqlCommand comm;
MySqlDataReader reader;
HttpCookie cookie;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
konekcija = new MySqlConnection(baza);
comm = konekcija.CreateCommand();
konekcija.Open();
}
private void button1_Click(object sender, EventArgs e)
{
string user = textBox2.Text.ToString();
string pass = textBox1.Text.ToString();
trylogin( user, pass);
}
public void trylogin(string user, string pass)
{
if (checkBox1.Checked)
{
cookie = new HttpCookie("remember_me");
cookie["Username"] = textBox2.Text;
cookie["Expire"] = "365 Days";
cookie.Expires = DateTime.Now.AddDays(365);
Response.Cookies.Add(cookie);
}
comm.CommandText = "SELECT * FROM korisnici WHERE user='"+user+"' AND pass='"+pass+"'";
reader = comm.ExecuteReader();
if (reader.Read() == true)
{
reader.Dispose();
}
else
{
reader.Dispose();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
konekcija.Close();
}
}
}
1 ответ
Поищите в интернете слово "запомнить меня в C#", вы найдете множество обсуждений, а именно:
http://forums.asp.net/t/1303629.aspx
В любом случае, вы пытаетесь сделать что-то действительно небезопасное в своем коде, будьте осторожны.
Независимо от вашей задачи "запомнить меня", хорошо, вы можете составлять свои sql-запросы "на лету", просто не забудьте удвоить ваши кавычки с заменой перед отправкой в sql engine:
user = user.Replace("'", "''"); //Assuming string values are not null here
password = password .Replace("'", "''");
comm.CommandText = "SELECT * FROM korisnici WHERE user='"+ user +"' AND pass='"+ password +"'";
Я настоятельно рекомендую вам научиться использовать параметры (например, "... and user=@user"): они обеспечат вам большую безопасность и надежность вашего кода, и вам не нужно использовать Replaces.
Еще одна хорошая практика - извлекать только необходимые поля. Если кто-то получит доступ к этому результату каким-либо образом, и вы также введете поле пароля в виде открытого текста, это с радостью покажет его. Если вы не "выберите *", система может быть небезопасной, но, по крайней мере, вы ничего не раздаете бесплатно:
comm.CommandText = "SELECT user_name,login_level,anything_you_really_need FROM korisnici WHERE user=@user AND pass=@pass";
MySqlParameter pUser = new MySqlParameter("@user", user);
MySqlParameter pPass = new MySqlParameter("@pass", password);
comm.SelectCommand.Parameters.Add(pUser);
comm.SelectCommand.Parameters.Add(pPass);