PHP Session管理

WBOY
發布: 2016-08-08 09:21:04
原創
964 人瀏覽過
讀取/設定目前快取的到期時間
      int session_cache_expire ([ string $new_cache_expire ] )
      string $new_cache_expire ] ) 項中。 因此,針對每個請求,需要在 session_start
() 函數呼叫之前 呼叫 session_cache_expire() 來設定快取到期時間。如果給定 new_cache_expire ,就使用 new_cache_expire 的值設定目前快取到期時間,以分鐘為單位,預設值是 180 (分鐘)。 讀取/設定快取限制器
      string session_cache_limiter
([ string $cache_limiter ] )      快取 string $cache_limiter ] ) 向客戶端 客戶端或代理伺服器透過偵測這個回應頭資訊來 決定對於頁面內容的快取規則。 設定快取限制器為 nocache 會禁止客戶端或代理伺服器快取內容, public 表示允許客戶端或代理伺服器快取內容, private 表示允許客戶端緩存, 但是不允許代理伺服器快取內容。在 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 )

  但不會重置目前會話所關聯的全域變量, 也不會重置會話 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_domain,//預設為空白
)
      如果存在那麼session_id =$_COOKIE[session_name()];然後去session.save_path指定的資料夾裡去找名字為
'SESS_'.session_id()的檔案.讀取檔案的內容反序列化,'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傳過來,但找不到資料。

<?php
    // 初始化会话
    session_name(&#39;Session_test&#39;);
    session_id(&#39;safdsadfasdfsadfasdf&#39;);
    session_start();
    
    $_SERVER[&#39;user&#39;] = &#39;admin&#39;;
    echo $_SERVER[&#39;user&#39;]."<br>";
    
    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(); 
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>

<body>
</body>
</html>
登入後複製

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

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板