PHP Session管理

來源:互聯網
上載者:User
讀取/設定當前緩衝的到期時間
int session_cache_expire ([ string $new_cache_expire ] )
請求開始的時候,緩衝到期時間會被重設為 180分鐘,並且儲存在 session.cache_expire 配置項中。 因此,針對每個請求,需要在 session_start() 函數調用之前 調用 session_cache_expire() 來設定緩衝到期時間。如果給定 new_cache_expire ,就使用 new_cache_expire 的值設定當前緩衝到期時間,以分鐘為單位,預設值是 180 (分鐘)。
讀取/設定緩衝限制器
string session_cache_limiter ([ string $cache_limiter ] )
緩衝限制器定義了向用戶端發送的 HTTP 回應標頭中的緩衝控制策略。 用戶端或者Proxy 伺服器通過檢測這個回應標頭資訊來 確定對於頁面內容的緩衝規則。 設定緩衝限制器為nocache 會禁止用戶端或者Proxy 伺服器緩衝內容, public 表示允許用戶端或Proxy 伺服器緩衝內容, private 表示允許用戶端緩衝, 但是不允許Proxy 伺服器緩衝內容。在 private 模式下, 包括 Mozilla 在內的一些瀏覽器可能無法正確處理 Expire 回應標頭, 通過使用private_no_expire 模式可以解決這個問題:在這種模式下, 不會向用戶端發送 Expire 回應標頭。
擷取/設定當前會話 ID
string session_id ([ string $id ] )
如果指定了 id 參數的值, 則使用指定值作為會話 ID。 必須在調用 session_start() 函數之前調用 session_id() 函數。 不同的會話管理器對於會話 ID 中可以使用的字元有不同的限制。 例如檔案會話管理器僅允許會話 ID 中使用以下字元:a-z A-Z 0-9 , (逗號)和 - (減號) 。
讀取/設定會話名稱
string session_name ([ string $name ] )
session_name() 函數返回當前會話名稱。 如果指定 name 參數, session_name() 函數會更新會話名稱, 並返回 原來的 會話名稱。請求開始的時候,會話名稱會被重設並且儲存到 session.name 配置項。 因此,要想設定會話名稱,那麼對於每個請求,都需要在 調用session_start() 或者 session_register() 函數 之前調用 session_name() 函數。 會話名稱至少需要一個字母,不能全部都使用數字, 否則,每次都會產生一個新的會話 ID。
讀取/設定當前會話的儲存路徑
string session_save_path ([ string $path ] )
指定會話資料儲存的路徑。 必須在調用 session_start() 函數之前調用 session_save_path() 函數。 在某些作業系統上,建議使用可以高效處理 大量小尺寸檔案的檔案系統上的路徑來儲存會話資料。 例如,在 Linux 平台上,對於會話資料儲存的工作而言,reiserfs 檔案系統會比 ext2fs 檔案系統能夠提供更好的效能。
啟動新會話或者重用現有會話
bool session_start ( void )
session_start() 會建立新會話或者重用現有會話。 如果通過 GET 或者 POST 方式,或者使用 cookie 提交了會話 ID, 則會重用現有會話。
銷毀一個會話中的全部資料
bool session_destroy ( void )

session_destroy() 銷毀當前會話中的全部資料,但是不會重設當前會話所關聯的全域變數, 也不會重設會話 cookie。 如果需要再次使用會話變數, 必須重新調用 session_start() 函數。為了徹底銷毀會話,比如在使用者退出登入的時候,必須同時重設會話 ID。 如果是通過 cookie 方式傳送會話 ID 的,那麼同時也需要 調用 setcookie() 函數來 刪除用戶端的會話 cookie。

1、session會判斷當前是否有$_COOKIE[session_name()];session_name()返回儲存session_id的COOKIE鍵值,這個值可以從php.ini找到。 如果不存在會產生一個session_id,然後把產生的session_id作為COOKIE的值傳遞到用戶端.相當於執行了下面COOKIE 操作,注意的是,這一步執行了setcookie()操作,COOKIE是在header頭中發送的,這之前是不能有輸出的。PHP有另外一個函數session_regenerate_id(), 如果使用這個函數,這之前也是不能有輸出的。
setcookie(session_name(), session_id(), session.cookie_lifetime,//預設0
session.cookie_path,//預設'/'當前程式跟目錄下都有效
session.cookie_domain,//預設為空白
)
如果存在那麼session_id =$_COOKIE[session_name()];然後去session.save_path指定的檔案夾裡去找名字為'SESS_'.session_id()的檔案.讀取檔案的內容還原序列化,然後放到$_SESSION中.


2、比如新添加一個值$_SESSION['test'] ='blah'; 那麼這個$_SESSION只會維護在記憶體中,當指令碼執行結束的時候,把$_SESSION的值寫入到session_id指定的檔案夾中,然後關閉相關資源.

3、SESSION發出去的COOKIE一般屬於即時COOKIE,儲存在記憶體中,當瀏覽器關閉後,才會到期,假如需要人為強制到期,比如 退出登入,而不是關閉瀏覽器,那麼就需要在代碼裡銷毀SESSION,方法有很多:
1]. setcookie(session_name(),session_id(),time() -8000000,..);//退出登入前執行
2]. usset($_SESSION);//這會刪除所有的$_SESSION資料,重新整理後,有COOKIE傳過來,但是沒有資料。
3]. session_destroy();//這個作用更徹底,刪除$_SESSION 刪除session檔案,和session_id。
當不關閉瀏覽器的情況下,再次重新整理,2和3都會有COOKIE傳過來,但是找不到資料。

";        echo $_COOKIE[session_name()];            //// 重設會話中的所有變數 -- 使用unset可以重設某個會話變數//    $_SESSION = array();    //    // 同時刪除會話 cookie//    if (ini_get("session.use_cookies")) //    {//        $params = session_get_cookie_params();//        setcookie(session_name(), '', time() - 42000,//            $params["path"], $params["domain"],//            $params["secure"], $params["httponly"]);    //    }//    // 最後,銷毀會話//    session_destroy(); ?>無標題文檔

著作權聲明:本文為博主郎涯工作室原創文章,未經博主允許不得轉載。

以上就介紹了PHP Session管理,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.