C#-WebForm-Session、Cookie-登錄驗證(未登錄跳至登錄界面)、隱藏地址欄傳值


Post 傳值(看不見的傳值) Get 傳值(看得見的傳值)

Session - 全局變量組

存放位置:服務端

作用:只要里面有內容,那么這個網站中所有的C#端都能訪問到這個變量 —— object類型

格式:

  web1 后台代碼:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按鈕點擊事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        Session["un"] = s;
    }
}

Session 是個一個object類型的“組”,可以放任何東西,string、int、數組等等

使用時先進行判斷Session是否是Null,不為空時進行賦值(李獻策lxc)

  web2 后台代碼:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["un"] != null)
        {
            Label1.Text = Session["un"].ToString();
        }
    }
}

優點:安全、方便、全局訪問無限制

劣勢:消耗服務器內存資源(每一個用戶是一條獨立的通道,每一條通道有若干的Session,如果同時很多人訪問,那么會造成服務器崩潰)

生命周期:20分鍾

  網頁打開時會打開一個新的Session,此Session會存在20分鍾,結束時自動清空,如果Session重新讀取時將重新計時

  當關閉網頁時,Session是不會取消的,仍然在倒計時;再重新打開網頁時,會打開新的Session,舊的Session仍在后台計時

注意:1、不要大量數據在Session里,盡量不要放集合

     2、臨時Session取完無用后記得清空(李獻策lxc)

 

Cookie - “全局變量組”

存放位置:客戶端電腦硬盤上

作用:保存數據信息,只能保存字符串,全局訪問 —— string類型

賦值:response  取值:request  判斷時不用value

格式:  

  web1 后台代碼:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按鈕點擊事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        Response.Cookies["un"].Value = s;
    }
}

Cookies 是一個String類型的“組”,只能存放字符串類型,以文本文檔字符串類型存放在客戶端某個地方

使用時先進行判斷Cookies是否是Null,不為空時進行賦值(李獻策lxc)

  web2 后台代碼:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["un"]!=null)
        {
            Label1.Text = Request.Cookies["un"].Value;
        }
    }
}

優點:不消耗服務器資源、全局訪問、只能保存字符串

劣勢:消耗電腦資源、不安全(Cookie會被抓取)、不可靠(用戶隨時可以刪除)

  注意:不要用Cookie保存密碼(登錄成功后才會將用戶名賦值給Cookie)

分類:會話Cookie 與 持久Cookie

生命周期:

  1、會話Cookie - 20分鍾

  網頁打開時會打開一個新的Cookie,此Cookie會存在20分鍾,結束時自動清空,如果Cookie重新讀取時將重新計時

  刪除辦法:

    (1)瀏覽器一關,此次訪問已中斷

    (2)沒有任何新的提交,20分鍾后過期

    (3)手動清除瀏覽器Cookie

  2、持久Cookie - 可以設置時間

  刪除辦法:(李獻策lxc)

    (1)代碼設置過期

    (2)手動清除瀏覽器Cookie

 

持久Cookie如何制作?

  前台界面 - 當復選框被選中時,保持持久Cookie:

  后台代碼:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按鈕點擊事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        if (s == "adimn" && TextBox2.Text == "1234")
        {
            Response.Cookies["un"].Value = s;
            //被選中時設置[持久Cookie]時間
            if (CheckBox1.Checked)
            {
                Response.Cookies["un"].Expires = DateTime.Now.AddDays(3);
            }

            Response.Redirect("Default2.aspx");
        }
    }
}

如何刪除持久cookie?

  后台代碼:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["un"]!=null)
        {
            Label1.Text = Request.Cookies["un"].Value;
        }

        Button1.Click += Button1_Click;
    }
    //點擊按鈕清除Cookie並退回登錄界面
    void Button1_Click(object sender, EventArgs e)
    {
        Response.Cookies["un"].Expires = DateTime.Now.AddDays(-10);
        Response.Redirect("Default.aspx");
    }
}

 

擴展一:

沒有登錄是無法跳至主頁面的 - 登錄驗證 - 不放入 IsPostBack 中

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["un"] != null)
        {
            Label1.Text = Request.Cookies["un"].Value;
        }
        //登錄驗證:如果未登錄跳至登錄頁面
        else
        {
            Response.Redirect("Default.aspx");
        }

        Button1.Click += Button1_Click;
    }
    //點擊按鈕清除Cookie並退回登錄界面
    void Button1_Click(object sender, EventArgs e)
    {
        Response.Cookies["un"].Expires = DateTime.Now.AddDays(-10);
        Response.Redirect("Default.aspx");
    }
}

 

擴展二:

跳轉至主頁面后,地址欄仍然顯示的是登錄界面的地址

特點:用地址欄傳值,但不會在地址欄中顯示傳值的內容(李獻策lxc)

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按鈕點擊事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        if (s == "adimn" && TextBox2.Text == "1234")
        {
            Response.Cookies["un"].Value = s;
            
            //Response.Redirect("Default2.aspx");
            Server.Transfer("Default2.aspx");
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM