但不會重置目前會話所關聯的全域變量, 也不會重置會話 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()的檔案.讀取檔案的內容反序列化,
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('Session_test'); session_id('safdsadfasdfsadfasdf'); session_start(); $_SERVER['user'] = 'admin'; echo $_SERVER['user']."<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教程有興趣的朋友有幫助。