用戶用浏覽器訪問一個網站,由於采用的http的特性,Web服務器並不能知道是哪一個用戶正在訪問,但一些網站,希望能夠知道訪問者的一些信息,例如是不是第一次訪問,訪問者上次訪問時是否有未做完的工作,這次是否為其繼續工作提供方便等等。用浏覽器訪問一個網站,可以在此網站的網頁之間跳轉,當從第一個網頁轉到第二個網頁時,第一個網頁中建立的所有變量和對象都將不存在。有時希望在這些被訪問的網頁中建立聯系,例如一個網上商店,訪問者可能從不同的網頁中選取不同的商品,那麼用什麼辦法記錄該訪問者選取的商品,也就是一般所說的購物筐如何實現。用Cookie對象可以解決以上問題。
一、cookies
簡單摘要:
在用戶電腦的硬盤上保存的一段文本
http協議包括浏覽器,允許站點在用戶電腦上以Cookies的形式來臨時保存數據
如果沒有設置保存時間,即會話cookies時:
1、如果你20分鐘內沒有再次刷新頁面,那麼此cookies就會自動刪除掉
2、當前訪問連接中斷,如關閉浏覽器,那麼cookies會自動刪除
如果設置保存時間,到時間後,cookies會自動刪除
當然,cookies的保存與否,關鍵在用戶,用戶可以手動清楚cookie。
作用:保持用戶的登陸狀態
用法:
1、獲取賬號:Response.Cookies["user"].Value = TextBox1.Text;
2、給該賬號設置登錄保持的過期時間:Response.Cookies["user"].Expires = DateTime.Now.AddDays(7);
3、清除cookies:Response.Cookies["user"].Expires = DateTime.Now.AddDays(-5); 只要讓數值為負即可,表示已過期幾天
二、登錄狀態保持實例
建立登錄Login頁面:
前台代碼:
<form id="form1" runat="server"> 用戶名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 密碼:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> <asp:CheckBox ID="CheckBox1" runat="server" /><label for="CheckBox1">記住登陸狀態7天</label><br /> <asp:Button ID="Button1" runat="server" Text="登陸" /> </form>
後台代碼:
protected void Page_Load(object sender, EventArgs e) { Button1.Click += Button1_Click; } void Button1_Click(object sender, EventArgs e) { //取值,數據庫查詢 bool ok = new UsersDA().Select(TextBox1.Text, TextBox2.Text); if (ok) { //若查到數據,即可以登陸成功 Response.Cookies["user"].Value = TextBox1.Text; if (CheckBox1.Checked) { //給cookies設置保存時間 Response.Cookies["user"].Expires = DateTime.Now.AddDays(7); } Response.Redirect("Main.aspx"); }
主界面Main後台代碼:
//判斷,cookies是否為空,不為空,根據cookies傳的值查詢 if (Request.Cookies["user"] != null) { Users u = new UsersDA().Select(Request.Cookies["user"].Value); Labdl.Text = u.NickName; Literal1.Text = ",歡迎你!"; } //為空,跳轉登錄頁面 else { Response.Redirect("Login.aspx"); }
有登陸就有退出登錄:
Main主界面退出登錄前台代碼:
<asp:Button ID="Btntc" runat="server" Text="退出登陸" />
後台代碼(清除cookies):
void Btntc_Click(object sender, EventArgs e) { //1清除cookies Response.Cookies["user"].Expires = DateTime.Now.AddDays(-5); //2刷新頁面/跳到登陸頁面 Response.Redirect("Login.aspx"); }