DCSIMG
Using Cookie in server side - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Using Cookie in server side

 

בפוסט הזה אני רוצה להדגים איך משתמשים ב - Cookie בצד השרת.
 
Cookie הוא אחד מהדרכים הותיקות ביותר לשמור מידע בצד הלקוח שניתן להשתמש בו גם בצד השרת.
 
 
נניח שיש לכם את קוד שמציג גריד עם מספר עמודות גדול מאוד ויש על הדף CheckListBox שמאפשר למשתמש להחליט איזה עמודות הוא מעוניין לראות.
 
הקוד נראה כך:
 
בצד הלקוח:
 

<asp:CheckBoxList ID="cbl" runat="server" RepeatDirection="Horizontal">

    <asp:ListItem Text="Id" Selected="True"></asp:ListItem>

    <asp:ListItem Text="First Name" Selected="True"></asp:ListItem>

    <asp:ListItem Text="Last Name" Selected="True"></asp:ListItem>

    <asp:ListItem Text="Age" Selected="True"></asp:ListItem>

    <asp:ListItem Text="Salaty" Selected="True"></asp:ListItem>

    <asp:ListItem Text="Seniority" Selected="True"></asp:ListItem>

</asp:CheckBoxList>

 

<br />

 

<asp:GridView ID="grid1" runat="server" OnRowDataBound="grid1_RowDataBound">

</asp:GridView>

 

<br />

 

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

 
יש לנו CheckListBox עם השמות של כל העמודות.
Grid ולחצן (כדי שנוכל לעשות PostBack).
 
צד השרת:
 

protected void Page_Load(object sender, EventArgs e)

{

    BindGrid();

}

 

private void BindGrid()

{

    DataTable table = new DataTable();

    table.Columns.Add("Id");

    table.Columns.Add("First Name");

    table.Columns.Add("Last Name");

    table.Columns.Add("Age");

    table.Columns.Add("Salary");

    table.Columns.Add("Seniority");

 

    table.Rows.Add(1, "Noam", "Gold", 30, 5000, 2.5);

    table.Rows.Add(1, "Pini", "Area", 25, 4500, 1);

    table.Rows.Add(1, "Alon", "Tamari", 20, 7000, 4);

 

    grid1.DataSource = table;

    grid1.DataBind();

}

 

protected void grid1_RowDataBound(object sender, GridViewRowEventArgs e)

{

    for (int j = 0; j < cbl.Items.Count; j++)

    {

        e.Row.Cells[j].Visible = cbl.Items[j].Selected;

    }

}

 
ב - Page_Load אנחנו נותנים Data ל - Grid (יוצרים טבלה עם סתם נתונים)
ובאירוע RowDataBound אנחנו מסתירים את העמודות שהמשתמש לא מעוניין לראות.
 
כמובן שבפעם הראשונה שהדף יעלה, המשתמש יראה את כל העמודות, הוא יוכל להוריד מה - CheckBoxList את הסימון עבור אותם עמודות שהוא אינו מעוניין לראות, לרפרש את העמוד ולראות רק את העמודות שהוא מעוניין.
 
הבעייה - המשתמש לא רוצה בכל פעם שהוא מעלה את הדף לסמן את העמודות שהוא רוצה לראות, הוא רוצה שהמחשב יזכור את הבחירה שלו מפעם קודמת.
 
הפיתרון - שימוש ב - Cookie.
 
נוסיף את הקוד הבא ללחצן שמרפרש את העמוד (אחרי שהמשתמש משנה את הבחירה שלו)
 

protected void Button1_Click(object sender, EventArgs e)

{

    HttpCookie cookie = new HttpCookie("ClientColumns");

    for (int j = 0; j < cbl.Items.Count; j++)

    {

        cookie.Values.Add(cbl.Items[j].Value, cbl.Items[j].Selected.ToString());

    }

    cookie.Expires = DateTime.Now.AddYears(1);

    Response.Cookies.Add(cookie);

}

 
אנחנו יוצרים Cookie נותנים לו את השם ClientColumns.
מוסיפים לו את רשימה של ערכים כשכל אחד מהם מורכב מ - Key ו - Value, במקרה שלנו בסופו של דבר אנחנו יוצרים משהו כזה:
 
Id=true&First Name=true&Last Name=false&Age=false&Salary=true&Seniority=true
 
לאחר מכן אנחנו מגדירים שתאריך התפוגה של ה - Cookie יהיה בעוד שנה (סתם תאריך)
והכי חשוב לא לשכוח להוסיף את ה - Cookie ל - Response.
 
כעת נוסיף ב - Page_Load את הקוד הבא (לפני הקריאה ל - BindGrid)
 

if (!IsPostBack)

{

    HttpCookie cookie = Request.Cookies["ClientColumns"];

    if (cookie != null)

    {

        foreach (string item in cookie.Values.Keys)

        {

            ListItem li = cbl.Items.FindByValue(item);

            li.Selected = bool.Parse(cookie.Values[item]);

        }

    }

}

 
אנחנו מנסים להוציא מה - Request את ה - Cookie (במידה והוא קיים)
רצים בלולאה על כל ה - Keys (כזכור כל Key הוא כשם אחד מה - items ב - CheckBoxList)
ומגידירים האם הוא יהיה מסומן לפי הערך שנשמר ב - Cookie.
 
 
כעת במידה והמשתמש יבחר לראות רק חלק מהעמודות - בפעם הבאה שהוא יגיע לעמוד המחשב יזכור את הבחירה שלו.
 
בפוסט הבא אני אדגים שימוש ב - Cookie בצד הלקוח.
פורסם: Feb 06 2010, 11:14 PM by Shlomo | with 1 comment(s)
תגים:, , ,

תוכן התגובה

שלמה גולדברג כתב/ה:

בהתבסס על הפוסט הקודם אדגים כאן איך ניתן לכתוב ולקרוא מה - Cookie בצד הלקוח. למעשה בפוסט הקודם הצגתי

# February 8, 2010 10:39 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 6 and 1 and type the answer here:


Enter the numbers above: