错误是:当我尝试使用Response.Cookies.Add(cookie)时,当前上下文中不存在名称“Response”;
我不确定我还需要包含什么才能让它发挥作用。 我创建应用程序,用户可以登录,当他们登录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();
}
}
}
答案 0 :(得分:0)
在网上搜索“在c#中记住我”,你会发现很多讨论,即:
http://forums.asp.net/t/1303629.aspx
无论如何,你正在尝试用你的代码真的不安全的东西,小心。
无论你是“记住我”的任务,好吧,你可能想要“动态”编写你的SQL查询,只需记住在发送到sql引擎之前用引号加倍你的引号:
user = user.Replace("'", "''"); //Assuming string values are not null here
password = password .Replace("'", "''");
comm.CommandText = "SELECT * FROM korisnici WHERE user='"+ user +"' AND pass='"+ password +"'";
我强烈建议你学习使用参数(即“...和user = @ user”):它们会为你的代码提供更多的安全性和健壮性,这样你就不需要使用替换。
另一个好习惯是只提取所需的字段。如果有人能够访问此结果并且您还将密码字段放在明文中,这将很高兴地显示出来。 如果你没有“选择*”,系统可能仍然不安全,但至少你不会免费提供任何东西:
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);