自定义session处理机制之数据库存储session
自定义session处理机制主要由session_set_save_handler()函数实现。注意参数的顺序
首先在数据库中建立session表
CREATE TABLE `session` ( `sid` char(32) NOT NULL DEFAULT "", `data` varchar(255) NOT NULL DEFAULT "", `mtime` int(10) NOT NULL DEFAULT "0", `ip` char(15) NOT NULL DEFAULT "", `card` char(32) NOT NULL DEFAULT "" //该项主要存储用户的ip、浏览器信息等,用来判断用户的sessionid是否合法,以防止用户sessionid被劫持后伪造用户登录 ) ENGINE=MyISAM DEFAULT CHARSET=gbk
自己写的session处理类
<?php class session{ protected $conn; protected $card; protected $max_time; protected $table; public function __construct(){ if(ini_get("session.save_handler")=="user" || ini_set("session.save_handler", "user")){ session_set_save_handler( array($this,"start"), array($this,"close"), array($this,"read"), array($this,"write"), array($this,"destroy"), array($this,"gc") ); $this->conn=mysql_connect("localhost","root","root") or die("连接错误!"); mysql_select_db("test"); $this->table="session"; $this->max_time=100; $this->card=md5($_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_USER_AGENT"]); session_start(); } } public function start($path,$sess_name){ echo "start</br>"; } public function read($sid){ $sql="select `data` from `".$this->table."` where `sid`="{$sid}" and data="".$this->card."""; // echo $sql; $result=mysql_query($sql); $row=mysql_fetch_assoc($result); echo "read</br>"; return mysql_affected_rows()>0 ? $row["data"]:""; } public function write($sid,$data){ // $sql="update " $sql = "select `sid` from ".$this->table." where `sid` ="{$sid}" and `card`="".$this->card."""; mysql_query($sql); $time=time(); if(mysql_affected_rows()>0){ $sql="update `".$this->table."` set `data`="{$data}",`mtime`={$time} where `sid`="{$sid}""; echo $sql; }else{ $sql="insert into ".$this->table." (`sid`,`data`,`mtime`,`ip`,`card`) values ("{$sid}","{$data}","{$time}","{$_SERVER["REMOTE_ADDR"]}","".$this->card."")"; } echo "write</br>"; return mysql_query($sql)?true:false; } public function close(){ self::gc($this->max_time); echo "close</br>"; mysql_close($this->conn); return true; } public function destroy($sid){ $sql="delete from ".$this->table." where `sid`="{$sid}""; mysql_query($sql); return true; } public function gc($max_time){ $max_time=$this->max_time; $time=time(); $sql="delete from ".$this->table." where `mtime`<".($time-$max_time); mysql_query($sql); echo "gc</br>"; return true; } } $session=new session(); $_SESSION["username"]="zhangsan"; $_SESSION["age"]=20;
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: thinkphp模板页判断变量为空的方法
- 下一篇: 用python做正弦信号的时域波形和频谱图