天天看點

cookie和session

Cookie概念

      在浏覽某些 網站 時,這些網站會把 一些資料存在 用戶端 , 用于使用網站 等跟蹤使用者,實作使用者自定義 功能.

    是否設定過期時間:

              如果不設定 過期時間,則表示這個 Cookie生命周期為 浏覽器會話期間 , 隻要關閉浏覽器,cookie就消失了.

               這個生命期為浏覽會話期的cookie,就是會話Cookie;

     存儲:    一般儲存在 記憶體,不在硬碟;

             如果設定了過期時間, 浏覽器會把cookie儲存在硬碟上,關閉再打開浏覽器, 這些cookie 依然有效直到 超過的設定過期時間;

Session的概念

        session機制是一種伺服器端的機制,伺服器使用一種類似于散清單的結構(也可能就是使用散清單)來儲存資訊。

       儲存:

            存儲在Server段的記憶體程序中的,而這個程序相當不穩定,經常會重新開機,這樣重新開機的話,就會造成Session失效,使用者就必須要重新登入,使用者體驗相當差,比如使用者在填寫資料,快要結束的時候Session失效,直接跳到登入頁面;

是否已經建立過session:

         當程式需要為某個用戶端的請求建立一個session時,伺服器首先檢查這個用戶端的請求裡是否已包含了一個session辨別(稱為session id),

如果已包含則說明以前已經為此用戶端建立過session,伺服器就按照session id把這個session檢索出來....使用(檢索不到,會建立一個),

如果用戶端請求不包含session id,則為此用戶端建立一個session并且生成一個與此session相關聯的session id,

session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字元串,這個session id将被在本次響應中傳回給用戶端儲存。

(總結: 建立一個session時,伺服器看這個用戶端 是否包含session辨別, 是的話按照session id把session檢索出來,否則就得 建立一個.)

     Session的用戶端實作形式(即Session ID的儲存方法):

表單隐藏字段就是伺服器會自動修改表單,添加一個隐藏字段,以便在表單送出時能夠把session id傳遞回伺服器。比如:

<form name="testform" action="/xxx">

<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">

<input type="text">

</form>

實際上這種技術可以簡單的用對action應用URL重寫來代替。

 session 用法:

          使用者資訊儲存到session前,先啟動;

             session_start();                       啟動session

                  $_SESSION['user']="zy";       設定使用者名

                  unset($_SESSION['user']);     銷毀使用者名

                  session_destory();                        失去已經存儲的session的資料

cookie 和session 的差別:

1、cookie資料存放在客戶的浏覽器上,session資料放在伺服器上.

       簡單的說,當你登入一個網站的時候,如果web伺服器端使用的是session,那麼所有的資料都儲存在伺服器上面,

用戶端每次請求伺服器的時候會發送 目前會話的session_id,伺服器根據目前session_id判斷相應的使用者資料标志,以确定使用者是否登入,或具有某種權限。

由于資料是存儲在伺服器 上面,是以你不能僞造,但是如果你能夠擷取某個登入使用者的session_id,用特殊的浏覽器僞造該使用者的請求也是能夠成功的。

session_id是服務 器和用戶端連結時候随機配置設定的,一般來說是不會有重複,但如果有大量的并發請求,也不是沒有重複的可能性,我曾經就遇到過一次。

登入某個網站,開始顯示的 是自己的資訊,等一段時間逾時了,一重新整理,居然顯示了别人的資訊。

Session是由應用伺服器維持的一個伺服器端的存儲空間,使用者在連接配接伺服器時,會由伺服器生成一個唯一的SessionID,用該SessionID 為辨別符來存取伺服器端的Session存儲空間。而SessionID這一資料則是儲存到用戶端,用Cookie儲存的,使用者送出頁面時,會将這一 SessionID送出到伺服器端,來存取Session資料。這一過程,是不用開發人員幹預的。是以一旦用戶端禁用Cookie,那麼Session也會失效。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session。

3、session會在一定時間内儲存在伺服器上。當通路增多,會比較占用你伺服器的性能考慮到減輕伺服器性能方面,應當使用COOKIE。

4、單個cookie儲存的資料不能超過4K,很多浏覽器都限制一個站點最多儲存20個cookie。(Session對象沒有對存儲的資料量的限制,其中可以儲存更為複雜的資料類型)

  注意:

      session很容易失效,使用者體驗很差;

      雖然cookie不安全,但是可以加密 ;

      cookie也分為永久 和暫時 存在的;

      浏覽器 有禁止cookie功能 ,但一般使用者都不會設定;

     一定要設定失效時間,要不然浏覽器關閉就消失了;

      例如:

            記住密碼功能就是使用永久cookie寫在用戶端電腦,下次登入時,自動将cookie資訊附加發送給服務端。

            application是全局性資訊,是所有使用者共享的資訊,如可以記錄有多少使用者現在登入過本網站,并把該資訊展示個所有使用者。

 兩者最大的差別在于生存周期,一個是IE啟動到IE關閉.(浏覽器頁面一關 ,session就消失了)

一個是預先設定的生存周期,或永久的儲存于本地的檔案。(cookie)

上一篇: SQL優化
下一篇: SQL優化