2012-11-10 5 views
0

오류 : Response.Cookies.Add (쿠키)를 사용하려고하면 '응답'이라는 이름이 현재 컨텍스트에 없습니다.C#에서 쿠키를 만들려고 할 때 HttpResponse

작동시키기 위해 내가 무엇을 포함해야하는지 잘 모르겠습니다. 사용자가 로그인 할 수있는 앱을 만들고 로그인 쿠키가 만들어지면 앱을 다시 열 때 다시 로그인 할 필요가 없습니다.

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

당신이하고있는 것은 안전하지 않습니다 - 당신은 믿을 수 없다 그런 식으로 사용자 이름을 알려주는 쿠키. 그리고 유효한 로그인을 제공했는지 알기도 전에 쿠키를 설정하고 있습니다. 매개 변수가없는 쿼리에 사용자 정의되지 않은 사용자 입력을 넣고 싶지는 않습니다 ... 미안하지만 대답하지 않습니다. 귀하의 질문,하지만 여기에 더 큰 문제가 있습니다. – MikeSmithDev

+0

당신은'trylogin'에 SQL 인젝션을 가지고 있습니다. 누구든지 자격 증명없이 로그인 할 수 있습니다. – usr

답변

0

, 당신은 많은 토론을 찾을 수 있습니다 "C#에서 나를 기억"에 대한 웹, 즉 검색 : 어쨌든

"Remember Me" in ASP.Net

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

을, 당신은 정말 불안 뭔가를 시도하고 코드로 조심해.

user = user.Replace("'", "''"); //Assuming string values are not null here 
password = password .Replace("'", "''"); 
comm.CommandText = "SELECT * FROM korisnici WHERE user='"+ user +"' AND pass='"+ password +"'"; 
:


에 관계없이 단지 SQL 엔진에 보내기 전에 교체로 따옴표를 두 배로 기억, 작업, 좋아, 당신이 "즉시"당신의 SQL 쿼리를 구성 할 수 있습니다 "나를 기억"

매개 변수 (예 : "... and user = @ user") 사용법을 배우는 것이 좋습니다 : 코드에 대한 보안과 견고성을 높이고 대체 할 필요가 없습니다.

다른 유용한 방법은 필요한 필드 만 추출하는 것입니다. 누구나이 결과에 액세스 할 수 있고 암호 필드를 일반 텍스트로 입력하면이 정보가 실제로 표시됩니다. 당신이 "* 선택"하지 않는 경우, 시스템 어쩌면 여전히 안전하지 않은,하지만 적어도 당신은 무료로 아무것도 제공하지 않습니다

comm.CommandText = "SELECT user_name,login_level,anything_you_really_need FROM korisnici WHERE [email protected] AND [email protected]"; 
MySqlParameter pUser = new MySqlParameter("@user", user); 
MySqlParameter pPass = new MySqlParameter("@pass", password); 

comm.SelectCommand.Parameters.Add(pUser); 
comm.SelectCommand.Parameters.Add(pPass); 
관련 문제