亚洲av无码乱码国产一区二区,午夜理论片yy44880影院,午夜久久久久久禁播电影,熟睡人妻被讨厌的公侵犯

04
2018/08

PHP 項目實戰(zhàn)開發(fā)中,Session功能常用的函數(shù)

發(fā)布時間:2018-08-04 09:12:04
發(fā)布者:pengyifeng
瀏覽量:
0

之前我們介紹了session的原理和簡單實用方法,今天我們再來說說Session中常用的一些函數(shù)。

session_start() 會創(chuàng)建新會話或者重用現(xiàn)有會話。

當會話自動開始或者通過 session_start() 手動開始的時候, PHP 內部會調用會話管理器的 open 和 read 回調函數(shù)。 會話管理器可能是 PHP 默認的, 也可能是擴展提供的, 也可能是通過 session_set_save_handler() 設定的用戶自定義會話管理器。 通過 read 回調函數(shù)返回的現(xiàn)有會話數(shù)據(jù), PHP 會自動反序列化數(shù)據(jù)并且填充 $_SESSION 超級全局變量。

要想使用命名會話,請在調用 session_start() 函數(shù) 之前調用 session_name() 函數(shù)。
如果啟用了 session.use_trans_sid 選項, session_start() 函數(shù)會注冊一個內部輸出管理器, 該輸出管理器完成 URL 重寫的工作。

注意:要使用基于 cookie 的會話, 必須在輸出開始之前調用 session_start() 函數(shù)。

session_unset()

銷毀當前數(shù)據(jù)?;蛘?_SESSION = array(); 可以unset ($_SESSION['varname']) 來刪除其中的一條數(shù)據(jù);.

session_destroy()和session_unset()銷毀所有會話數(shù)據(jù)不同,session_destroy()銷毀的是會話本身,此函數(shù)一出,當前session就變成垃圾了,等待gc機制去回收它。但是它并不會重置當前會話所關聯(lián)的全局變量, 也不會重置會話 cookie。該有的會話數(shù)據(jù)還是在,只不過“身份”變了而已。如果gc尚且還沒有去回收它,那么它仍然是可以讀取到的,這當然是不愿意看到的,因此在session_destroy() 之前往往還要session_unset()一下。

如果需要再次使用會話變量, 必須重新調用 session_start() 函數(shù)。 為了徹底銷毀會話,比如在用戶退出登錄的時候,必須同時重置會話 ID。 如果是通過 cookie 方式傳送會話 ID 的,那么同時也需要 調用 setcookie() 函數(shù)來 刪除客戶端的會話 cookie。

下面例子是銷毀數(shù)據(jù)本身:

PHP 項目實戰(zhàn)開發(fā)中,Session功能常用的函數(shù).jpg

刪除會話$_SESSION = array() 或session_unset() ;銷毀會話本身session_destroy();和setcookie()。session_destroy()執(zhí)行后會話就變成垃圾會話,等待gc機制回收。

session_commit() 是 session_write_close()別稱。和session_start相反,這是寫和關閉。即保存當前session數(shù)據(jù),并且關閉當前會話。為了防止并發(fā)的寫session,任何時刻只能允許有一個PHP腳本在操作session,因此,一個腳本一旦session_start打開session,那么在此腳本終止或者調用session_write_close()之前,別的任何腳本都不能使用session。在默認情況下腳本結束時會自動寫入和關閉session,但是在腳本執(zhí)行時間比較長的時候,此腳本就一致占據(jù)鎖使得別的腳本無法使用session,因此導致許多錯誤。因此,最佳實踐是,任何session變量,數(shù)據(jù)的更改(如$_SESSION[xx] = xxx),都要及時使用session_commit()保存數(shù)據(jù),關閉會話。

session_id() 可以用來獲取/設置 當前會話 ID。 為了能夠將會話 ID 很方便的附加到 URL 之后, 你可以使用常量 SID 獲取以字符串格式表達的會話名稱和 ID。簡單說,就是如果你開啟的是POST/GET方式獲取會話ID,那么這個參數(shù)可以通過session.use_trans_sid設定并在URL中看得見,而在腳本中通過全局變量SID來直接獲取。

//配置ini_set('session.use_trans_sid', 'sid');//url中表現(xiàn)127.0.0.1?sid=xxxxx//直接獲取$sid = SID;
  • 如果指定了 session_id () 參數(shù)的值, 則使用指定值作為會話 ID。 必須在調用 session_start() 函數(shù)之前調用 session_id() 函數(shù)。不同的會話管理器對于會話 ID 中可以使用的字符有不同的限制。 如果當前沒有會話,則返回空字符串("")。

  • 這里有兩點值得注意下:

  • 如果使用 cookie 方式傳送會話 ID,并且指定了 id 參數(shù), 在調用 session_start() 之后都會向客戶端發(fā)送新的 cookie, 無論當前的會話 ID 和新指定的會話 ID 是否相同

  • 在通過session_id ($id )切換當前會話ID之前,需要通過session_commit()來關閉上一個會話,否則當前會話還是原來的


關鍵詞:
返回列表