css&javascript Application、Session、cookie 三大傳值簡易說明

其實這三個,每一個都可以獨立一章來寫
由於本人太過於懶散事務煩雜,所以就重點列列





Application
存在伺服器上,20分鐘沒人用就消失
不同使用者間可以呼叫同一個Application

Session
存在伺服器上,每個使用者都會取得獨立的Session
撰寫容易,取得方便,也有20分鐘上限

cookie
存在使用者的電腦上,不佔伺服器空間
有時間限制,不設定時間就像一次性的Session
斷線消失


其實很簡單,適合用在那裡就容易分得出差別
Application:用在記錄「訪客次數」,每個使用者連入就加1
Session:購物車、使用者登入、email 等等,不同使用者有各自已值
cookie:同上,好處是不佔伺服器的記憶體,撰寫上稍稍麻煩

程式碼:

protected void Page_Load(object sender, EventArgs e)
{
    //-----------------------------------------------------------------
    /*Application
        * 1.存在在伺服器的紀憶體中,20分鐘後沒有人使用,自動消失
        * 2.可與其他網頁間傳遞數值
        * 3.所有連入網站的使用者都可以共用此值
        * 
        * 適合寫在:來訪人數,每次有人來就加1
    */
    if (Application["myNum"] ==null)
            Application.Add("myNum",10);
    else
        Application["myNum"] =(int)Application["myNum"] +10;

    Label1.Text = Application["myNum"].ToString();
    //-----------------------------------------------------------------
    /*Session
        * 1.存在在伺服器的紀憶體中,20分鐘沒有使用一樣會消失
        * 2.每個Session對應各自的使用者
        * 3.可與其他網頁間傳遞數值
        * 4.使用者間不可共用
        * 5.瀏覽器會使用同個Session
        * 
        * 適合寫在:購物車、信箱、登入資訊等等
        * 不同使用者會有不同的Session
        * 但寫時要注意記憶體的問題,若Session過大會造成效率降低
        */

    if (Session["myNum"] == null)
        Session["myNum"] = 10;
    else
        Session["myNum"] = (int)Session["myNum"] + 10;
    Label2.Text = Session["myNum"].ToString();
    //-----------------------------------------------------------------

    if (Request.Cookies["MyC"] != null)//如果有值就放入label3中
        Label3.Text = Request.Cookies["MyC"].Value;
}

protected void Button1_Click(object sender, EventArgs e)
{
    //cookie是存在於客戶端,要取得cookie的值需要向客戶端Request
    //若cookie沒有設定日期,則像是一次性Session,一但關閉網頁就消失
    //通常設定日期往往都天荒地老:new DateTime(9999,12,31)
    //cookie是以key對應value,也可以是個集合values
    //若要改寫,以同樣名稱的key以Add方式寫回去會自動取代
    //cookie的值都是String,沒有int數字沒有圖,只有String


    if (Request.Cookies["MyC"] == null)
    {
        //向使用者的電腦提出需求,看有沒有叫"MyC"的cookies
        //如果是空值,表示沒有,則new一個response回去
        HttpCookie cookie = new HttpCookie("MyC", (100).ToString());
        cookie.Expires =new DateTime(9999,12,31);//設定到期日
        Response.Cookies.Add(cookie);
        Label3.Text = Request.Cookies["MyC"].Value;
    }
    else
    {
        //如果不是空值表示有,取出cookie的值加100並add回去
        int aa = int.Parse(Request.Cookies["MyC"].Value);
        aa += 100;
        HttpCookie cookie = new HttpCookie("MyC", aa.ToString());
        cookie.Expires = new DateTime(9999, 12, 31);
        Response.Cookies.Add(cookie);
        Label3.Text = aa.ToString();
    }
}

留言

熱門文章