## 實現接口類SessionHandlerInterface
~~~
<?php
/**
* Created by gather
* Email: chenruiqiang@yd-x.com
* Phone: 16601180687
* Copyright:源動互通(北京)科技有限公司
* Create Time: 2018/5/28 19:12
* 使用Mysql管理session
*/
class CustomSession implements SessionHandlerInterface{
private $link = null; //數據庫連接
private $lifetime; //聲明周期
/* 方法 */
public function close(){
return mysqli_close($this->link);
}
public function destroy($session_id){
//刪除session
$session_id = mysqli_real_escape_string($this->link,$session_id);
$sql = "DELETE FROM sessions WHERE session_id='{$session_id}'";
mysqli_query($this->link,$sql);
return mysqli_affected_rows($this->link) == 1;
}
public function gc($maxlifetime){
$sql = "DELETE FROM sessions WHERE session_expires < ".time();
mysqli_query($this->link,$sql);
return mysqli_affected_rows($this->link) > 0;
}
public function open($save_path,$session_name){
$this->lifetime = get_cfg_var("session.gc_maxlifetime"); //默認24分鐘
$this->link = mysqli_connect('localhost','root','xyq07041103');
mysqli_set_charset($this->link,'utf8');
mysqli_select_db($this->link,'email');
if ($this->link){
return true;
}
return false;
}
public function read($session_id){
$id = mysqli_real_escape_string($this->link,$session_id);
$sql = "SELECT * from sessions WHERE session_id='{$id}' AND session_expires > ".time();
$result = mysqli_query($this->link,$sql);
if (mysqli_num_rows($result) == 1){
return mysqli_fetch_assoc($result)['session_data'];
}
return '';
}
public function write($session_id,$session_data){
//首先查詢是否存在指定的session_id,如果存在更新數據,否自寫入數據
$session_id = mysqli_real_escape_string($this->link,$session_id);
$newExp = time() + $this->lifetime;
$sql = "SELECT * from sessions WHERE session_id='{$session_id}'";
$result = mysqli_query($this->link,$sql);
$rows = mysqli_num_rows($result);
if ($rows == 1){
$sql = "UPDATE sessions SET session_expires='{$newExp}',session_data='{$session_data}' WHERE session_id='{$session_id}'";
}else{
$sql = "INSERT INTO sessions VALUES('{$session_id}','{$session_data}','{$newExp}')";
}
mysqli_query($this->link,$sql);
return mysqli_affected_rows($this->link) == 1;
}
}
~~~
## 創建session
~~~
<?php
/**
* Created by gather
* Email: chenruiqiang@yd-x.com
* Phone: 16601180687
* Copyright:源動互通(北京)科技有限公司
* Create Time: 2018/5/28 20:00
*/
require_once "CustomSession.php";
$CustomSession = new CustomSession();
ini_set('session.save_handler','user'); //自定義管理session
session_set_save_handler($CustomSession,true);
session_start();
$_SESSION['username'] = 'king';
$_SESSION['age'] = '23';
$_SESSION['email'] = 'aaaaaa5474@126.com';
~~~
## 刪除session
~~~
<?php
/**
* Created by gather
* Email: chenruiqiang@yd-x.com
* Phone: 16601180687
* Copyright:源動互通(北京)科技有限公司
* Create Time: 2018/5/28 20:22
*/
require_once "CustomSession.php";
$CustomSession = new CustomSession();
ini_set('session.save_handler','user'); //自定義管理session
session_set_save_handler($CustomSession,true);
session_start();
print_r($_SESSION);
session_destroy();
~~~
本地環境測試成功
- 簡介
- Cookie
- HTML5 LocalStorage
- session
- 當瀏覽器關閉后,Session就銷毀了嗎?
- mysql數據庫保存session
- HTTP協議的由來
- fsockopen異步請求
- http防盜鏈
- Apache偽靜態知識補充
- 大并發量解決方案
- 大型網站是怎樣解決多用戶高并發訪問
- 網站高并發 大流量訪問的處理及解決方法
- 并發數與在線客戶數?注冊用戶數的關系
- 即時聊天程序
- 反向Ajax實現
- ob緩存作用
- 淺聊并發之戰
- php擴展安裝
- php安裝redis擴展
- SQLMap自動化實施SQL注入共計
- 命名空間namespace
- 集群和分布式之【session共享】
- php Redis存儲Session 【1】
- php Redis存儲Session 【2】
- php mysql存儲session【1】
- php緩存
- 文件緩存
- memcache和redis的比較
- 原生session與session in redis對比
- XSS攻擊【1】
- XSS攻擊【2】
- PHP消息隊列
- php+mysql 模擬發送郵件隊列
- php+mysql 模擬訂單處理隊列
- php+redis 模擬秒殺隊列
- RabbitMQ 消息隊列系統
- beanstalkd
- PHP構建即時通訊
- WebSocket協議
- workerman
- PHP變量的作用域
- PHP傳值和傳引用的區別
- PHP匿名函數
- PHP遞歸函數&應用
- PHP單例模式
- PHP性能優化
- RESTful
- 集群
- 增加pgsql擴展
- php.ini路徑查找
- Swoole Compiler
- mysql 主從
- 主從
- mysql-proxy
- window docker環境