0

エラーは次のとおりです。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();
        }
    }
}
4

1 に答える 1

0

Webで「remembermeinc#」を検索すると、多くのディスカッションが見つかります。

ASP.Netの「RememberMe」

http://forums.asp.net/t/1303629.aspx

とにかく、あなたはあなたのコードで本当に安全でない何かを試みています、気をつけてください。


「rememberme」タスクに関係なく、「オンザフライ」でSQLクエリを作成することをお勧めします。SQLエンジンに送信する前に、引用符を2倍にして置換することを忘れないでください。

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を使用する必要はありません。

もう1つの良い方法は、必要なフィールドのみを抽出することです。誰かが何らかの方法でこの結果にアクセスでき、パスワードフィールドもクリアテキストで入力している場合、これは喜んでそれを示します。「*」を選択しない場合、システムはまだ安全ではない可能性がありますが、少なくとも無料で何も提供しません。

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);
于 2012-11-11T00:13:48.403 に答える