php SESSION入库的实现

摘要:
会话仓库是重写会话机器。在会话周期期间,获取会话数据并将其记录在数据库中。默认情况下,会话存储在服务器上的文件中,这不容易管理。如果会话可以存储在数据库中,则可以方便地管理数据库。例如,会话仓库可以解决哪些问题?phpheader;//将会话存储方法设置为数据库//session.save_handler=filesini_Set;会话集保存处理程序;//打开并连接到数据库函数Open(){//使用pdo$pdo=newPDO;$pdo-˃exec;}//关闭连接函数close(){//使用pdo$pdo=newPDO;$pdo-˃exec;$pdo=null;}//read表函数中的信息read{/use pdo$pdo=newPDO,$pdo-˃exec;$read=$pdo-˃query-˃fetch;return$read[“session_info”];}/将会话保存到数据库函数write{/echo$session_id“” .$会话信息;//使用pdo$pdo=newPDO$pdo-˃exec;$read=$pdo-˃query-˃fetch;如果{$time=time();$pdo-˃exec;}否则{$sql=“updatesessionsetsession_info='$session_info'其中session_id='$ssession_id'”;$pdo-˃exec;}}//销毁指定的会话函数destroy{//使用pdo$pdo=newPDO;$pdo-˃exec;$pdo/˃exec)}//删除所有过期的会话函数gc(){}sessions_start();//确定是否存在会话{$status=1;}else{$sstatus=0;}//获取值$user to receive_ name=isset?˃服务器3名称:˂inputtype=“text”Name=

session入库,就是重写session制机,在session的周期内,获得到session的数据并记录到数据库

 Session默认是存放到服务器上的文件中,不方便管理,如果能把session存放到数据库中就可以方便的对数据库进行管理了

比如:

session入库可以解决哪些问题?

1.      可以解决跨域操作

2.      可以实现单点登陆

3.      可以统计在线人数

4.      可以实现同一时只允许一个用户在线

session_set_save_handler的回掉函数描述

实现session入库

       第一步:在php.ini配置文件中设置session.save_headler=user(默认是file)

                     或者使用ini_set设置ini_set(‘session.save_handler’,’user’);

       第二步:创建一个存放session的数据表

              session_id用于存放session_id的,字段类型为字符型,长度为32

              session_value用于存放session的内容,字段类型为text

    session_life   用于存放session的生存期

        第三步:session_set_save_handler ( callback $open , callback $close ,callback $read , callback $write , callback $destroy , callback $gc )

     第四步:代码实现

<?php
header('content-type:text/html;charset=utf-8');

//将session存储方式设置为存入数据库的方式
//session.save_handler = files
ini_set("session.save_handler", "user");

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

//打开并连接数据库
function open()
{
    //使用pdo
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
    $pdo->exec('set names utf8');
}

//关闭连接
function close()
{
    //使用pdo
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
    $pdo->exec('set names utf8');
    $pdo = null;
}

//从表中中读信息
function read($session_id)
{
    //使用pdo
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
    $pdo->exec('set names utf8');
    $read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);
    return $read["session_info"];
}

//将session存入数据库
function write ($session_id,$session_info)
{
    // echo $session_id. "        " . $session_info;
    //使用pdo
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
    $pdo->exec('set names utf8');
    $read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);

    if(empty($read))
    {
        $time = time();
        $pdo->exec("insert into session (session_id, session_info, session_life) values ('$session_id', '$session_info', '$time')");
    }
    else
    {
        $sql = "update session set session_info='$session_info' where session_id='$session_id'";
        $pdo->exec($sql);
    }
}

//销毁指定session
function destroy($session_id)
{
    //使用pdo
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
    $pdo->exec('set names utf8');
    $pdo->exec("delete from session where session_id='$session_id'");
}

//删除所有过期的session
function gc()
{

}

session_start();
//判断是否有session
if(isset($_SESSION['name']))
{

    $status = 1;
}
else
{
    $status = 0;

}

//获取需要接收的值
$user_name = isset($_POST['user_name'])?$_POST['user_name']:null;
$user_pwd = isset($_POST['user_pwd'])?$_POST['user_pwd']:null;
//使用pdo
$pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');
$pdo->exec('set names utf8');
$sql = "select * from user where username = '$user_name' and password = '$user_pwd' ";
$re = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
if($re)
{
    $status = 1;
    $_SESSION['name'] = $user_name;
}

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<?php if($status == 0){?>
    <h3>服务器3</h3>
    <form action="a.php" method="post">
        <table>
            <tr>
                <td>姓名:</td>
                <td><input type="text" name="user_name"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="user_pwd"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="登录"></td>
            </tr>
        </table>
    </form>
<?php } else{?>
    <h2>欢迎<?=$_SESSION['name']?>登录</h2>
    <h3>服务器3</h3>
<?php }
?>
</body>
</html>

免责声明:文章转载自《php SESSION入库的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GridView嵌套实现web版微信自动发消息(实现微信个人号机器人)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

How to Install VMware Tools in Arch Linux (Manjaro Linux)

by adminOctober 2, 2019VMware Tools incorporates many features that enhance the operation of VMware Workstation. For example, you can activate copy and pasting from documents on t...

mysql中文乱码解决方式

近期项目使用到mysql。却突然出现了中文乱码问题。尝试了多种方案,最终解决乱码问题,总结一下解决方式,给遇到同样问题的人一点參考。 中文乱码的原因 1.安装mysqlserver的时候编码集设定有问题 2.创建数据库的时候编码集设定有问题 3.创建表的时候编码集设定有问题 4.client的编码集设定有问题 能够通过命令查看编码集: show...

Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

由于MySQL编码原因会导致数据库出现乱码。 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码。 具体操作: 1、进入MySQL控制台 >mysql -uroot -p #输入密码进入 >status; #查看当前MySQL运行状态,如下图所示:  ...

xampp默认mysql数据库root密码的修改

因为安装xampp后的mysql默认用户root的密码为空,而比如部署Testlink时需要提供数据库密码,此时就需要给root设定密码(网上有些方法,大同小异,但是可能都未标明关键点,未一些出上手的童鞋造成了不成功)。 如下介绍两个方法: 方法一:通过phpmyadmin xampp也是通过phpmyadmin管理的,所以我们能登录到phpmyad...

造轮子之数据库对比工具DataBaseComparer

最近同时在维护好几个项目,有些项目是SqlServer的,另一些是MySql的,DBA推荐了一个线上库和线下库的对比工具,用的时候经常会在对比时,半天都没有进度。索性自己这次造个轮子,做了一个纯对比数据库表结构的工具,表之间可以对比字段名、类型、长度,出现这些不同就会显示在差异中。 程序运行的界面如下: 下一步之后: 这个是差异显示界面,用的是树形控件...

关于下拉菜单(dropdownlist)一些用法心得

asp.net学习地址 :http://www.cnblogs.com/limshirley/ 1.与数据库绑定 SqlConnection conn= new SqlConnection(ConfigurationSettings.AppSettings["job"]);//数据库连接信息 SqlCommand myCommand = new SqlCo...