国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP的session機制,配置與高級應用

Original 2016-11-09 14:43:48 323
abstract:一. PHP的session原理:1.開啟session_start(),服務器端產(chǎn)生session文件,將相關(guān)信息存儲到這個文件中,文件以"sess_"為前綴,連接session_id()值來命名(內(nèi)容是由特定算法生成的用戶的明文信息,大型項目則須進行加密處理),同時將sessionid保留到客戶端瀏覽器的cookie中。2.第二次開啟session_start(),瀏覽器判

一. PHP的session原理:

1.開啟session_start(),服務器端產(chǎn)生session文件,將相關(guān)信息存儲到這個文件中,文件以"sess_"為前綴,連接session_id()值來命名(內(nèi)容是由特定算法生成的用戶的明文信息,大型項目則須進行加密處理),同時將sessionid保留到客戶端瀏覽器的cookie中。

2.第二次開啟session_start(),瀏覽器判斷cookie中是否有sessionid,如果有,不再創(chuàng)建文件,而是直接使用這個sessionid訪問服務器,通過sessionid找對應的session文件,讀取session中內(nèi)容存儲到$_SESSION數(shù)組中。

注意:session_start()前不能有任何輸出,此函數(shù)向客戶端發(fā)一個session_id保存在cookie中。

二. PHP機制使用session:

  1.開啟session

    session_start();

  2.存取session

    $_SESSION['uname'] = 'chenwei';

  3.銷毀session

   unset($_SESSION['uname']);         //刪除內(nèi)存中由session數(shù)組保存的變量;$_SESSION = array()清楚所有session變量

   setCookie(session_name(), '', time()-1, '/');  //刪除客戶端cookie中的sessionid, session_name()默認是PHPSESSID

   session_destory();               //銷毀服務器端session文件

三. PHP的session配置選項

查看session配置的最直接方式就是phpinfo(); 然后根據(jù)需要配置/usr/local/php/etc/php.ini文件里的session選項,其實一般默認就可以。

可以考慮更改的配置選項有:

  session.cookie_lifetime = 0;     //設(shè)置cookie保存時間(秒),相當于session的過期時間,0表示直到瀏覽器重啟

    session.save_handler = files;     //保存和取回數(shù)據(jù)的方式,默認為文件; 涉及到存儲機制,此處不作延伸

當然也可以不修改配置文件,使用系統(tǒng)函數(shù),達到同樣的效果:

  setCookie(session_name(), session_id(), time()+1440, '/'); //設(shè)置cookie有效時間為1440秒(24’),解決關(guān)閉瀏覽器session丟失的現(xiàn)象;session在服務器上存的最長時間為24’,重新連接后才不會過期。(即保持登錄功能)

四. PHP的session自動回收機制(啟動概率 = session.gc_probability / session.gc_divisor)

  session.gc_probability = 1     //啟動幾率

  session.gc_divisor = 1000     //被除數(shù),因子

  session.gc_maxlifetime = 1440  //設(shè)置session的最大過期時間,默認1440''

只要客戶端存在操作,session過期時間就會保持不減;當超過過期時間未操作,回收機制就會啟動,將服務端session刪除。

五. 基于URL傳遞session的id(解決客戶端禁用cookie的情況)

  1. url傳參:

    <a href="demo.php?<?php echo session_name().'='.session_id(); ?>">DEMO</a>

  服務端處理:

    $sid = !empty($_GET[session_name()]) ? $_GET[session_name()] : '';

    session_id($sid);  //設(shè)置用已有的sid開啟會話,在session_start()之前

    session_start();

  2. 如何自動判斷是否開啟了cookie,并使用對應的傳遞方式?(使用系統(tǒng)自帶SID常量,自動判斷)

    <a href="demo.php?<?php echo SID; ?>">DEMO</a>

    $sid = !empty($_GET[session_name()]) ? $_GET[session_name()] : '';

    if($sid != ''){

      session_id($sid);

    }

  3. 使URL自動加session的id?

    enable_trans_uid配置選項,和運行時選項session.use_trans_sid都被激活時,當客戶端禁用cookie時,相對的URL將自動被修改為包含sessionid,如果沒有配置或使用Windows服務器,可以使用常量SID。


Release Notes

Popular Entries