Archive | December 21, 2012

Trang login với Session và Cookie

Tạo 1 database SQL server 2005 với 1 bảng có 2 trường.

Trang Login.aspx

PHP Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <center> 
        <asp:Login ID="Login1" runat="server" BackColor="#F7F6F3" BorderColor="#E6E2D8" BorderPadding="4" 
            BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" 
            ForeColor="#333333" Width="324px" OnAuthenticate="Login1_Authenticate"> 
            <TitleTextStyle BackColor="#5D7B9D" Font-Bold="True" Font-Size="0.9em" ForeColor="White" /> 
            <InstructionTextStyle Font-Italic="True" ForeColor="Black" /> 
            <TextBoxStyle Font-Size="0.8em" /> 
            <LoginButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" 
                Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284775" /> 
        </asp:Login> 
    </center> 
    </div> 
    </form> 
</body> 
</html>  

Trang Login.aspx.cs

PHP Code:
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 

public partial class Login : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!IsPostBack) 
        { 
            if (Request.Cookies["UserCookie"] != null) 
            { 
                //gan 2 textbox luc nhap usename va password 
                TextBox txtUserName = Login1.FindControl("UserNameText") as TextBox; 
                TextBox txtPassword = Login1.FindControl("PasswordText") as TextBox;          
                //gan username va password vao Cookie 
                txtUserName.Text = Request.Cookies["UserCookie"]["UserNameText"]; 
                txtPassword.Text = Request.Cookies["UserCookie"]["PasswordText"]; 
                //luu usernam va password vao cookie 
                Login1.RememberMeSet = true; 
            } 
        } 
    } 
    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
        bool Logined = false; 
        string strSql = "SELECT [UserName],[Password] FROM [Users] WHERE [UserName] = @UserNameParameter AND [Password] = @PasswordParameter ";         
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
        conn.Open(); 
        SqlCommand cmd = new SqlCommand(strSql, conn); 
        cmd.CommandType = CommandType.Text; 
        //username va password trong cung 1 row 
        cmd.Parameters.Add(new SqlParameter("@UserNameParameter", Login1.UserName)); 
        cmd.Parameters.Add(new SqlParameter("@PasswordParameter", Login1.Password)); 

        SqlDataReader da = cmd.ExecuteReader(); 
        if (da.Read()) 
        {             
            FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet); 
            if (Login1.RememberMeSet == true) 
            { 
                if (Request.Cookies["UserCookie"] == null) 
                { 
                    HttpCookie httpcookie = new HttpCookie("User");                     
                    Response.Cookies.Add(httpcookie); 
                    httpcookie.Values.Add("UserNameText", da["UserName"].ToString()); 
                    httpcookie.Values.Add("PasswordText", da["Password"].ToString()); 
                    DateTime dtExpiry = DateTime.Now.AddDays(12); 
                    Response.Cookies["UserCookie"].Expires = dtExpiry; 
                } 
                else 
                { 
                    Request.Cookies["UserCookie"]["UserNameText"] = da["UserName"].ToString(); 
                    Request.Cookies["UserCookie"]["PasswordText"] = da["Password"].ToString(); 
                } 
            } 
            else 
            { 
                if (Request.Cookies["UserCookie"] != null) 
                { 

                    Request.Cookies.Remove("UserCookie"); 
                } 
            } 
            Logined = true; 
        } 
        conn.Close(); 
        cmd.Dispose(); 
        if (Logined == true) 
        { 
            Session["UserNameText"] = Login1.UserName; 
            Session["PasswordText"] = Login1.Password; 
            Response.Redirect("Default.aspx"); 
        } 
    } 

Toán tử điều kiện if( ?: or ? ) trong C#

Sử dụng toán tử ?? (null-coalescing operator) và toán tử điều kiện ?: (conditional operator)  trong C# giúp cho việc viết code ngắn gọn và rõ ràng hơn rất nhiều.

Khi chúng mới bắt đầu học lập trình, mục tiêu đầu tiên của chúng ta là viết code làm sao cho đúng. Nhưng về sau, khi đã có chút lông chút cánh rồi, chúng ta không chỉ cần phải viết đúng, mà còn phải viết sao cho ngắn gọn, rõ ràng. Viết code ngắn gọn là một điều khá quan trọng, nó một phần nào đó nói lên sự chuyên nghiệp của bạn.

Tôi xin lấy một đoạn code ví dụ như sau:

 

 

 

 

 

 

 

 

9

10

public void PrintError(string error)

{

    if (error != null) {

        Console.WriteLine(error);

    }

    else

    {

        Console.WriteLine(“Succeeded”);

    }

}

Nếu error được truyền vào khác null thì output ra câu báo lỗi, và outputSucceeded! ra nếu ngược lại. Đoạn code trên rất đơn giản, và có thể đấy là cách mà khi mới “vào nghề” chúng ta sẽ viết.

Nếu “đủ lông đủ cách” hơn chút, các bạn sẽ viết nó thế này:

 

public void PrintError(string error)

{

    Console.WriteLine(error != null ? error : “Succeeded!”);

}

Chà, như vậy là đã gọn gàng hơn so với cách 1 rất nhiều rồi.

Cách viết thứ 2 chúng ta vừa sử dụng toán tử ?: (conditional operator) mà chúng ta vẫn quen gọi là toán tử điều kiện hay biểu thức điều kiện. Nó sẽ đánh giá xem biểu thức bên trái dấu ? trả về true hay false. Nếu true thì sẽ thực hiện phần phía bên trái của dấu :, false thì thực hiện phần phía bên phải. Toán tử này chúng ta gặp khá nhiều, và cũng sử dụng rất nhiều vì tình tiện lợi, ngắn gọn của nó.

Toán tử ?: ưu tiên thực hiên từ phải qua trái. Nghĩa là nếu bạn có a ? b : c ? d : e thì nó sẽ thực hiện a ? b : (c ? d : e) chứ không phải (a ? b : c) ? d : e.
Chi tiết bạn có thể xem thêm tại đây.

Nếu bạn hỏi ví dụ trên có thể ngắn gọn hơn được nữa không? Xin trả lời rằng chúng ta có thể làm cho nó ngắn gọn hơn nữa bằng cách sử dụng toán tử ??.

 

 

public void PrintError(string error)

{

    Console.WriteLine(error ?? “Succeeded!”);

}

Toán tử ?? có tên gọi là null-coalescing operator (không biết dịch thế nào cho đúng nữa). Toán tử này có lẽ chúng ta ít khi gặp hơn. Nó sẽ đánh giá xem phần phái bên trái ?? bằng null hay khác null. Nếu khác null, nó sẽ trả về chính phần bên trái đó (trong ví dụ trên trả về error), còn nếu là null, nó sẽ trả về phần phía bên phải ??(trong ví dụ là trả về Succeeded!).

Toán tử ?? cũng có cách sử dụng kết hợp. Nghĩa là bạn có thể viết a ?? b ?? c cho những yêu cầu thích hợp sử dụng nó.