自定义Session存储方式
函数中一个参数对应一个函数,函数的名称自定但参数为固定格式,没有用到也要。
一、open(string save_path, string session_name)为session_start 参数string save_path session存取路径 string session_name传递session id的cookie名字。
function _session_open(string save_path, string name)
{
$db=mysql_connect("localhost","root","123456","tendao")
return TRUE
}
二、close为session_close 无参数
在此对应关闭数据库,但一般网站中在此一般不要关闭。
三、read(key)为读取session键值。key对应session id。
四、write(key,date)其中的data对应设置的session变量,格式如下:
email_name|s:13:"qqtxt@163.com"member_id|s:1:"1"
五、destroy(key)注销session
在此程序段中对应删除对应记录项。
六、gc(expiry_time)清除过期session记录。
表的结构 `session`
--
CREATE TABLE `session` (
`session_key` char(32) NOT NULL,
`session_data` char(255) NOT NULL,
`session_expiry` int(11) unsigned NOT NULL,
PRIMARY KEY (`session_key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8字符集根据情况更改
<?php
class Session{
var $expiry=3600
var $db
function __construct(){
$this->Session()
}
function Session(){
session_set_save_handler( array (&$this, "_session_open"),
array (&$this, "_session_close"),
array (&$this, "_session_read"),
array (&$this, "_session_write"),
array (&$this, "_session_destroy"),
array (&$this, "_session_gc")
)
}
/**
* open session handler
*
* @param string $save_path
* @param string $session_name
* @return boolen
*/
function _session_open($save_path, $session_name)
{
$this->db=mysql_connect("localhost","root","123456") or die("数据库连接失败!")
mysql_select_db("tendao",$this->db)
return TRUE
}
function _session_close(){
return true
}
function _session_read($key){
$expiry=time()
$s_query=sprintf("select session_data from session where session_key= '%s' and session_expiry >%d " , $key, $expiry )
$result=mysql_query($s_query,$this->db)
$row=mysql_fetch_assoc($result)
if($row){
return $row['session_data']
}
else
return FALSE
}
function _session_write($key,$data){
$expiry_time=time()+$this->expiry
$s_query=sprintf("select session_data from session where session_key= '%s'", $key)
$result=mysql_query($s_query,$this->db)
if(mysql_num_rows($result)==0){
$s_query=sprintf("insert into session values('%s','%s', %d)",$key,$data,$expiry_time)
$result=mysql_query($s_query,$this->db)
}
else{
$s_query=sprintf("update session set session_key='%s', session_data='%s',session_expiry=%d where session_key='%s'",$key,$data,$expiry_time,$key)
$result=mysql_query($s_query,$this->db)
}
return $result
}
function _session_destroy($key){
$s_query=sprintf("delete from session where session_key= '%s'", $key)
$result=mysql_query($s_query,$this->db)
return $result
}
function _session_gc($expiry_time){
$expiry_time=time()
$s_query=sprintf("delete from session where session_expiry <%d", $expiry_time)
$result=mysql_query($s_query,$this->db)
return $result
}
}
$_ses_=new Session()
session_start()
$_SESSION['time']=time()+1200
echo strval(time()).'<br/>'.strval($_SESSION['time'])
?>
USER为关键字,不能使用如果A里提交页,B是写入数据库,那么你在A里提交的表单(USER)传到B里的值就应该为你的USER的值,比如说“tom”,在B这边可以使用session("USER")=request("User")的方式赋给Session,这样的话,你在打开一个数据库表后,就可以把这个值赋给他或是使用UPDATE语句加进去。
如果说无法插入,那么,你改一下:
打开我的电脑,选择“工具”---》“文件夹选项”---》“查看”---》“使用简单共享”这个勾去了,点确定
选择你的虚拟文件夹:如放在A目录下,就对A目录下点右键选择“属性”---》“安全”---》“添加”按钮---》“高级按钮”---》“立即查找”按钮---》选中“Everyone”用户,点确定。然后在Everyone权限里把读写权限都加上即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)