PHP保存session默認的是採用的文件的方式來保存的,這僅僅在文件的空間開銷很小的windows上是可以採用的,但是如果我們採用uinx或者是liux上的文件系統的時候,這樣的文件系統的文件空間開銷是很大的,然而session是要時時刻刻的使用的,大量的用戶就要創建很多的session文件,這樣對整個的服務器帶來性能問題。
另一方面,如果服務器起採用羣集的方式的話就不能保持session的一致性,所以我們就緒要採用數據庫的方式來保存session,這樣,不管有幾臺服務器同時使用,只要把他們的session保存在一臺數據庫服務器上就可以保證session的完整了,具體如何來實現請繼續看下去。
PHP保存session默認的情況下是採用的文件方式來保存的,我們在PHP的配製文件PHP.ini中可以看到這樣的一行,
session.save_handler="files"
這樣的意思就是採用文件來保存session 的,要採用數據庫來保存的話,我們需要修改成用戶模式,改成
session.save_handler="user"
<?php header('content-type:text/html;charset=utf-8'); @$con = mysql_connect("127.0.0.1",'root','root'); mysql_select_db("other"); /** * @return bool * @content 打開session */ function open() { // echo 'open'; return true; } /** * @return bool * @content 關閉session */ function close() { // echo 'close'; return true; } /** * @param $session_id * @return bool * @content 根據session_id讀取session */ function read($id) { // echo 'read'; $sql = "select * from `session` where id='$id'"; if($session_data = mysql_query($sql)){ if($res = mysql_fetch_assoc($session_data)){ echo $res['id']; } }else{ echo '沒有符合條件的session數據'; } return true; } //寫入session function write($id,$sess_data) { // echo 'write'; $sql = "replace into session(`id`,`data`)values('$id','$sess_data')"; if($bool = mysql_query($sql)){ echo 1; }else{ echo 0; } return true; } //根據session_id銷燬session function destroy($id) { // echo 'destroy'; $sql = "delete from `session` where id='$id'"; if(mysql_query($sql)){ echo 'del ok'; }else{ echo 'del no'; } return true; } //垃圾回收session function gc() { echo 'gc'; return true; } session_set_save_handler('open','close','read','write','destroy','gc'); session_start(); $_SESSION['name'] ='asd'; $_SESSION['id'] = '123'; session_destroy();