session存儲到mysql

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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章