.NET Logo
Welcome Guest Search | Active Topics | Members | Log In | Register

การทำหน้า Login Options · View
paedotnet
Posted: Thursday, July 10, 2008 4:54:17 PM

Rank: มือเทพ
Groups: Member

Joined: 12/6/2007
Posts: 354
Location: bkk

ผมจะแสดงไว้เป็น 2 ตัวอย่างนะครับคือ การสร้าง ระบบ login อย่างง่าย และ แบบมี Ticket

การสร้าง ระบบ login อย่างง่าย

ในตัวอย่างนี้
ผมมีข้อมูลใน  Database ดังรูป  ( ฐานข้อมูลชื่อ LoginDB , ตาราง ชื่อ mylogin)


แล้วไปที่ web site
ลาก textbox 2 textbox , button 1 button มาวางดังรูป


จากนั้น คลิกที่ button แล้วเขียนโค้ดดังนี้

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.Common;
public partial class login : System.Web.UI.Page
{
    bool isLogin=false;
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        IsCheck(UsernameTextBox.Text, PasswordTextBox.Text);//เรียกใช้เมธอด IsCheck แล้วส่งค่า username,password ที่รับค่าเข้ามาจากทาง TextBox ไป
    }
    private void IsCheck(string username, string password)//ตรวจสอบค่าที่รับเข้ามา
    {
        IDbDataParameter param1, param2 = null;
        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); //จะทำเป็น AppSetting ใน webconfig แล้วเรียกใช้ผ่านชื่อของ AppSetting ก็ได้
        IDbConnection con = factory.CreateConnection();//จะใช้ เป็น SqlConnection ก็ได้ครับ
        con.ConnectionString = @"Addr =.\Sqlexpress;Database =LoginDB;Integrated Security=SSPI"; //จะทำเป็น ConnectionString ใน  webconfig ก็ได้
        IDbCommand com = factory.CreateCommand(); //จะใช้เป็น SqlCommand ก็ได้
        com.Connection = con;
        com.CommandText = "SELECT m.username  , m.password  FROM mylogin AS m WHERE m.username = @username AND m.password = @password";
        param1 = factory.CreateParameter();
        param1.ParameterName = "@username";
        param1.DbType = DbType.String;
        param1.Value = username;
        param2 = factory.CreateParameter();
        param2.ParameterName = "@password";
        param2.DbType = DbType.String;
        param2.Value = password;
        com.Parameters.Add(param1);
        com.Parameters.Add(param2);
        con.Open();
        using (IDataReader reader = com.ExecuteReader())
        {
            while (reader.Read())
            {
                if (username == reader.GetString(0))
                {
                    if (password == reader.GetString(1))
                    {
                        isLogin = true;//ถ้า username,password ตรงกับฐานข้อมูลให้กำหนดค่าจริงให้กับตัวแปร isLogin
                     }
                    else
                    {
                        isLogin = false;//ถ้า password ไม่ตรงก็ให้เป็น false
                    }
                }
                else
                {
                    isLogin = false;//ถ้า username ไม่ตรงกับฐานข้อมูลก็ให้เป็น false
                }
            }
            reader.Close();
            con.Close();
        }
        if (isLogin)//ตรวจสอบค่าของ isLogin ว่าเป็น true หรือ false
        {
            Response.Redirect("page1.aspx"); //เมื่อ login ได้ให้ ไปที่หน้า page1.aspx
        }
        else
        {
            Response.Write("Login Failed"); //เมื่อไม่สามารถ login ได้ก็แจ้ง error
        }
    }
}

 

แล้วลองรันดูนะครับ ถ้าใส่ username,password ถูกก็จะเข้าสู่หน้าต่อไป (page1.aspx)

 

 

การสร้างหน้า login  แบบ มี Ticket

ปกติแล้วถ้าใช้ตัวอย่าง ตามที่เขียนมา ถ้าเรามีหลายๆหน้า แต่เราต้องการให้ ผู้ใช้งาน login ก่อน ถึงจะเข้าหน้าอื่นๆได้ จะต้องเขียนคำสั่งเพิ่มเข้ามา

ไม่งั้น ถ้าผู้ใช้งานเข้าหน้าอื่นก็จะสามารถเข้าได้เลยถ้ารู้ url โดยที่ไม่ต้อง login ดังนั้นในการเขียนคำสั่งเพิ่ม เพื่อป้องกันไม่ให้ผู้ใช้งานสามารถเข้าหน้าอื่นๆ

ได้ก่อนที่จะ login

ซึ่งมีหลายวิธี เช่น การใช้ Session, Cookies ,querystring ,Ticket ฯ

ในตัวอย่างนี้ผมจะแสดงโดยใช้ Ticket นะครับ

 

ผมจะใช้โค้ดเดิมที่ผมเขียนก่อนหน้านี้นะครับ
1 . เปิด ไฟล์ webconfig แล้วเขียนโค้ดตร authenticaltion เพิ่มดังนี้

       <authentication mode="Forms">
   <forms loginUrl="login.aspx" name="login" timeout="60" path="/">
   </forms>
  </authentication>
  <authorization>
   <deny users="?"/>
   <allow users="*"/>
  </authorization>

2. เขียนโค้ดดังนี้

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.Common;
public partial class login : System.Web.UI.Page
{
    bool isLogin=false;
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        IsCheck(UsernameTextBox.Text, PasswordTextBox.Text);//เรียกใช้เมธอด IsCheck แล้วส่งค่า username,password ที่รับค่าเข้ามาจากทาง TextBox ไป
    }
    private void IsCheck(string username, string password)//ตรวจสอบค่าที่รับเข้ามา
    {
        IDbDataParameter param1, param2 = null;
        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
        IDbConnection con = factory.CreateConnection();//จะใช้ เป็น SqlConnection ก็ได้ครับ
        con.ConnectionString = @"Addr =.\Sqlexpress;Database =LoginDB;Integrated Security=SSPI";
        IDbCommand com = factory.CreateCommand(); //จะใช้เป็น SqlCommand ก็ได้
        com.Connection = con;
        com.CommandText = "SELECT m.username  , m.password  FROM mylogin AS m WHERE m.username = @username AND m.password = @password";
        param1 = factory.CreateParameter();
        param1.ParameterName = "@username";
        param1.DbType = DbType.String;
        param1.Value = username;
        param2 = factory.CreateParameter();
        param2.ParameterName = "@password";
        param2.DbType = DbType.String;
        param2.Value = password;
        com.Parameters.Add(param1);
        com.Parameters.Add(param2);
        con.Open();
        using (IDataReader reader = com.ExecuteReader())
        {
            while (reader.Read())
            {
                if (username == reader.GetString(0))
                {
                    if (password == reader.GetString(1))
                    {
                        isLogin = true;//ถ้า username,password ตรงกับฐานข้อมูลให้กำหนดค่าจริงให้กับตัวแปร isLogin
                     }
                    else
                    {
                        isLogin = false;//ถ้า password ไม่ตรงก็ให้เป็น false
                    }
                }
                else
                {
                    isLogin = false;//ถ้า username ไม่ตรงกับฐานข้อมูลก็ให้เป็น false
                }
            }
            reader.Close();
            con.Close();
            if (isLogin)
            {
                MyTicket(username); //เรียกใช้ ticket
            }
            else
            {
                Response.Write("Login Failed");
            }
        }
     
    }
    void MyTicket(string username) //Ticket
    {
        FormsAuthenticationTicket ticket;//สร้าง Ticket
        HttpCookie cookie = null; //สร้าง cookies เพื่อเก็บค่าเป็น cookies
        ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(5), false, "");
        string encrypt = FormsAuthentication.Encrypt(ticket);
        cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypt);
        Response.Cookies.Add(cookie);
        Response.Redirect("page1.aspx");
    }
}


จากนั้นทดสอบรันดูให้รันที่หน้าอื่นๆที่ไม่ใช้ หน้า login.aspx ผลลัพธ์คือจะไม่สามารถเข้าหน้าอื่นๆได้ถ้ายังไม่ login  แล้วทางโปรแกรมก็จะ redirect ไปที่หน้า login.aspx ให้เอง
 

 



[With great power comes great responsibility]
kokoyull
Posted: Saturday, July 19, 2008 1:39:08 AM
Rank: มือฝึกหัด
Groups: Member

Joined: 4/26/2008
Posts: 8
อย่างนี้แตกต่างไรกับการกำหนดตรง web.config โดยตรงอ่ะคะ
paedotnet
Posted: Saturday, July 19, 2008 2:22:25 PM

Rank: มือเทพ
Groups: Member

Joined: 12/6/2007
Posts: 354
Location: bkk

หมายถึงอะไรต่างกันเหรอครับ  ถ้าจะทำ หน้า แบบที่มี authentication  ต่างๆก็ต้องกำหนดใน web.config ก่อนเช่นถ้ามีหน้า login อะครับแล้วต้องให้ผู้ใช้งาน

 login ก่อนที่จะเข้าหน้าอื่นๆได้ก็ต้องกำหนดค่าต่างๆ ใน web.config ก่อน หรือไม่งั้นถ้าจะเขียนเองก็อาจจะเขียนเป็น session ก็ได้ หรือว่าถ้าต้องการ lock  บางหน้าก็อาจจะเขียนได้ดังนี้

<location path="page1.aspx">
      <system.web>
         <authorization>
            <deny users="*"/>
           </authorization>
      </system.web>
   </location>
 

 



[With great power comes great responsibility]
Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

YAFVision Theme Created by Jaben Cargman (Tiny Gecko)
Powered by Yet Another Forum.net version 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.


Sponsored by