php中關於會話機制的理解

       web服務器端與客戶端瀏覽器進行通信時,是基於http協議的.但是http協議是無狀態協議,所謂無狀態是說本次的http請求與下一次請求是單獨的請求,每次請求保存的信息都不會保存.因此會話機制就應運而生,這種機制就是解決這種問題.通過會話機制可以保留通信信息,比如用戶的信息保存,因此也實現了用戶在使用應用過程中的跟蹤,狀態的維護.


    cookie:
     cookie機制,是可以將訪問產生的一段信息保存在客戶端瀏覽器,進行下一次訪問的時候,會將該信息帶入請求頭信息中,將信息
     傳遞到服務器,從而實現web應用對用戶的信息跟蹤與維護.

     cookie的設置方式:   setcookie(name,value,expire);    //name:cookie名稱,  value:cookie值,   expire:cookie的過期時間
             當expire過時間設置爲0時,瀏覽器關閉,就會刪除cookie

     對cookie信息的獲取:   $_COOKIE["name"];

     對cookie信息的修改:   $_COOKIE["name"] = value;


     刪除cookie的兩種方式:   
    1> setcookie(name);  //直接刪除cookie

    2> setcookie(name,value,time()-100);    //設置cookie的過期時間小於當前時間
    




    session:
    session機制,同樣能實現保存用戶信息和維持請求狀態.但是與cookie不同的是,session將保存的信息存放在,web服務器.默認是存放在文件中,在php.ini配置文件中,配置session.save_path可以將session產生的文件存放在該位置,但是需要注意的是,該文件路勁需要httpd進程的寫權限比如apache的寫權限,否則無法存儲session數據.當指定的目錄不存在時,服務器不會自動創建,而 是需要手動創建.  session機制在默認情況下,是基於cookie的.也就是說.在使用session_start();初始化時,web服務器會爲訪問者自動生成一個sessionID 來唯一標識用戶,並且將該ID存儲在客戶端瀏覽器,以cookie機制來存儲,該cookie名稱爲固定的,默認在php配置文件中session.name配置,值爲PHPSESSID.該cookie的值是自動生成的,但是在php中可以使用session_id()獲取在瀏覽器保存的cookie值和session_name()獲取在瀏覽器保存的cookie名稱.

      而在使用過程中保存的信息,會存放在服務器配置的文件路勁下並且以sess_爲前綴,以session_id爲結尾命名,比如session id爲vp8lfqnskjvsiilcp1c4l484d3,那麼session文件名就是sess_vp8lfqnskjvsiilcp1c4l484d3,但是session不僅僅只能基於cookie,因爲瀏覽器可以禁用cookie,如果瀏覽器禁用後,客戶端就不能保存該cookie信息,從而影響session的使用.
        假如瀏覽器禁用cookie後,我們可以使用下面的途徑解決該問題:
    1、設置php.ini中的session.use_trans_sid = 1,當客戶端的Cookie被禁用或出現問題時,PHP會自動 把session id附着在URL中,
       這樣再通過session id就能跨頁使用session變量了
    2、手動通過URL傳值、隱藏表單傳遞session id。
    3、用文件、數據庫等形式保存session_id,在跨頁過程中手動調用。


     但是瀏覽器基本上都不會禁用cookie,因爲禁用之後,瀏覽器訪問其他應用時都會出現問題.



     設置使用session的方式:
    session_start(); //初始化session

    $_SESSION['name'] = value;    // name:要設置的session名稱,  value:要設置的session名稱對應的值

    $_SESSION['name'];        // 獲取名稱爲name的session值

     session信息的刪除方式:
    需要刪除三個地方保存的數據,但是首先需要初始化session   session_start():
    1步: 刪除客戶端瀏覽器保存的cookie信息
        setcookie(session_name(),session_id(),time()-100); 或者   setcookie(session_name());

 
    2步: 清空session全局變量
        $_SESSION = array();    或者    session_unset();

    3步: 刪除session文件
        session_destroy();





 總結:
    cookie:通過瀏覽器第一次訪問web應用時通過web服務器調用設置cookie的相關函數比如setcookie(),告訴客戶端瀏覽器設置cookie
     信息,在進行下一次請求web服務器應用時,瀏覽器就會將保存的用戶信息,發送給web服務器.從而實現跨頁面獲取用戶信息.因此也可以說
     用戶信息是維護在客戶端瀏覽器的.

        session: 在客戶端訪問服務器時,通過session_start()爲客戶端分配一個sessionID標識.並且將用戶信息保存在客戶端文件.當用戶
     下次訪問web服務器的其他頁面時,瀏覽器會將分配的sessionID以cookie形式串入服務器,服務器獲取具有該sessionID標識的文件,從而
     獲取到對應的用戶信息.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章