php开发教程更改会话存储(session入库)
1,知识点
- a)通过session_set_save_handler()更改存储
- b)session_set_save_handler()必须在session_start()之前
- c)有6个回调函数,open,close,read,write,destroy,gc。
- 4)read必须返回字符串,其他函数返回bool值
- 6个回调函数执行的时间:
- open():开启会话执行
- close():关闭会话执行
- read():打开会话后就执行
- write():更改会话会话的值和关闭会话之前执行,如果调用了session_destroy()就不会调用write()
- destroy():调用session_destroy()的时候自动执行
- gc():垃圾回收的时候自动执行。
复制代码 2、代码实现
- <?php
- //打开会话
- function open() {
- global $link;
- $link=mysqli_connect('localhost','root','root','data');
- mysqli_set_charset($link,'utf8');
- return true;
- }
- //关闭会话
- function close() {
- return true;
- }
- //读取会话
- function read($sess_id) {
- global $link;
- $sql="select sess_value from sess where sess_id='$sess_id'";
- $rs=mysqli_query($link,$sql);
- $rows=mysqli_fetch_row($rs);
- return (string)$rows[0];
- }
- //写入会话
- function write($sess_id,$sess_value) {
- global $link;
- $sql="insert into sess values ('$sess_id','$sess_value',unix_timestamp()) on duplicate key update sess_value='$sess_value',sess_time=unix_timestamp()";
- return mysqli_query($link,$sql);
- }
- //销毁会话
- function destroy($sess_id) {
- global $link;
- $sql="delete from sess where sess_id='$sess_id'";
- return mysqli_query($link,$sql);
- }
- //垃圾回收
- function gc($lifetime) {
- global $link;
- $expires=time()-$lifetime; //过期时间点
- $sql="delete from sess where sess_time<$expires";
- return mysqli_query($link,$sql);
- }
- //更改会话存储
- session_set_save_handler('open','close','read','write','destroy','gc');
- //开启会话
- session_start();
- //session_destroy();
复制代码
|