php如何将mysql数据库中的admin字段赋值给session_转php中使用session_set_save_handler()函数把session保存到MySQL数据库实例...

PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用 uinx或者是liux上的文件系统的时候,这样的文件系统的文件空间开销是很大的,然而session是要时时刻刻的使用的,大量的用户就要创建很多的 session文件,这样对整个的服务器带来性能问题。

另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以我们就绪要采用数据库的方式来保存session,这样,不管有 几台服务器同时使用,只要把他们的session保存在一台数据库服务器上就可以保证session的完整了,具体如何来实现请继续看下去。

PHP保存session默认的情况下是采用的文件方式来保存的,我们在PHP的配制文件PHP.ini中可以看到这样的一行:

复制代码 代码如下:

session.save_handler="files"

这样的意思就是采用文件来保存session 的,要采用数据库来保存的话,我们需要修改成用户模式,改成

复制代码 代码如下:

session.save_handler="use"

就可以了,但是,这仅仅是说明我门没有采用文件的方式存储session,我们还要选择数据库和建立数据库的表。

建立数据库和数据库的表结构,我们可以采用PHP可以使用的任何的数据库,因为PHP和mysql的结合最好,我就使用mysql来做示例,当然根据你的需要可以改称别的数据库。

创建数据库

复制代码 代码如下:

create database 'session';

创建表结构

复制代码 代码如下:

create table 'session'( id char(32) not null , 'user 'char(30), data char(3000) ,primary key ('id') );

PHP保存session编写PHP文件

复制代码 代码如下:

$con = mysql_connect("127.0.0.1", "user" , "pass");

mysql_select_db("session");

function open($save_path, $session_name) {

return(true);

}

function close() {

return(true);

}

function read($id) {

if ($result = mysql_query("select * from session where id='$id'")) {

if ($row = mysql_felth_row($result)) {

return $row["data"];

}

} else {

return "";

}

}

function write($id, $sess_data) {

if ($result = mysql_query("update session set data='$sess_data' where id='$id'")) {

return true;

} else {

return false;

}

}

function destroy($id) {

if ($result = mysql_query("delete * from session where id='$id'")) {

return true;

} else {

return false;

}

}

function gc($maxlifetime) {

return true;

}

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

session_start();

// proceed to use sessions normally

保存成为session_user_start.php。

现在我们的PHP保存session的工作就已经完成了,只要你在需要在使用session的时候,把session_user_start.php包含进来.注意,这个文件一定要在文件的第一行包含,然后就像使用文件的session一样的方法使用就可以了。

以上仅仅是个简单教程,在实际的应用中,可以对它封装得更专业些,参考代码如下:

SessionMysql.class.php

复制代码 代码如下:

/**

* SessionMysql 数据库存储类

*/

defined('IN_QIAN') or exit('Access Denied');

class SessionMysql {

public $lifetime = 1800; // 有效期,单位:秒(s),默认30分钟

public $db;

public $table;

/**

* 构造函数

*/

public function __construct() {

$this->db = Base::loadModel('SessionModel');

$this->lifetime = Base::loadConfig('system', 'session_lifetime');

session_set_save_handler(

array(&$this, 'open'),  // 在运行session_start()时执行

array(&$this, 'close'),  // 在脚本执行完成 或 调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完后被执行

array(&$this, 'read'),  // 在运行session_start()时执行,因为在session_start时,会去read当前session数据

array(&$this, 'write'),  // 此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行

array(&$this, 'destroy'), // 在运行session_destroy()时执行

array(&$this, 'gc')   // 执行概率由session.gc_probability 和

session.gc_divisor的值决定,时机是在open,read之后,session_start会相继执行open,read和gc

);

session_start(); // 这也是必须的,打开session,必须在session_set_save_handler后面执行

}

/**

* session_set_save_handler open方法

*

* @param $savePath

* @param $sessionName

* @return true

*/

public function open($savePath, $sessionName) {

return true;

}

/**

* session_set_save_handler close方法

*

* @return bool

*/

public function close() {

return $this->gc($this->lifetime);

}

/**

* 读取session_id

*

* session_set_save_handler read方法

* @return string 读取session_id

*/

public function read($sessionId) {

$condition = array(

'where' => array(

'session_id' => $sessionId

),

'fields' => 'data'

);

$row = $this->db->fetchFirst($condition);

return $row ? $row['data'] : '';

}

/**

* 写入session_id 的值

*

* @param $sessionId 会话ID

* @param $data 值

* @return mixed query 执行结果

*/

public function write($sessionId, $data) {

$userId = isset($_SESSION['userId']) ? $_SESSION['userId'] : 0;

$roleId = isset($_SESSION['roleId']) ? $_SESSION['roleId'] : 0;

$grouId = isset($_SESSION['grouId']) ? $_SESSION['grouId'] : 0;

$m = defined('ROUTE_M') ? ROUTE_M : '';

$c = defined('ROUTE_C') ? ROUTE_C : '';

$a = defined('ROUTE_A') ? ROUTE_A : '';

if (strlen($data) > 255) {

$data = '';

}

$ip = get_ip();

$sessionData = array(

'session_id' => $sessionId,

'user_id'  => $userId,

'ip'   => $ip,

'last_visit' => SYS_TIME,

'role_id'  => $roleId,

'group_id'  => $grouId,

'm'    => $m,

'c'    => $c,

'a'    => $a,

'data'   => $data,

);

return $this->db->insert($sessionData, 1, 1);

}

/**

* 删除指定的session_id

*

* @param string $sessionId 会话ID

* @return bool

*/

public function destroy($sessionId) {

return $this->db->delete(array('session_id' => $sessionId));

}

/**

* 删除过期的 session

*

* @param $lifetime session有效期(单位:秒)

* @return bool

*/

public function gc($lifetime) {

$expireTime = SYS_TIME - $lifetime;

return $this->db->delete("`last_visit`

}

}

在系统文件的某个地方,实例化这个类即可!

复制代码 代码如下:

new SessionMysql();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防止u盘中毒的方法

防止u盘中毒的方法是什么,下面一起来看看吧。 方法一、通过修改注册表来阻断U盘病毒 即使关闭了自动播放功能,但是还是会在双击盘符的时候入侵系统,通过修改注册表来阻止U盘病毒,但是U盘病毒依然会在双击盘符时入侵系统&#xff…

python创建sqlite3 unicode error_python/sqlite3:发生异常:sqlite3.operationalerror

我正在尝试创建一个函数来处理API错误消息,但是我在python中得到了这个错误消息:Exception has occurred: sqlite3.OperationalErrornear "Test4": syntax error服务器响应为:{"message":"Failed to validate one or more request parameters",&…

win10 dns异常上不了网如何解决

遇到win10 dns异常上不了网如何解决呢,接下来就给大家讲述一下win10系统dns异常上不了网的修复步骤。 1、首先,我们单击左下角的开始菜单按钮,然后右键单击命令提示符选项。 2、然后,我们复制以下命令:ipconfig / flu…

python创建变量revenue、并赋值为98765_第七章:Python之数据库编程

第一节:数据库API与全局变量及核心类基本流程数据库APIpython DB API 2.0 通过全局变量查看 DB API特性全局变量用于判断该数据库模块所支持的功能,通常有以下3个全局变量apilevel:显示数据库模块的API版本号 threadsafety:指定该数据库模块的线程安全等级 paramstyle:指定…

win7电脑麦克风有电流声怎么办

1、因为我们音量设置不合理造成的现象,音量如果过大的话,很容易会造成麦克风出现杂音的产生,所以我们要合理控制音量,避免出现类似的现象; 2、麦克风本身质量就存在有问题。可以在别的电脑上面进行尝试,看看是不是这个…

java 三级考试_java三级考试理论题

Java试卷一、单项选择题:1. 试题: 在WINDOWS环境下,ODBC在__A____中设置A. 控制面板B. 注册表C. 浏览器D. 写字板2. 阅读以下描述: C*.jspfalseJSP页面上的代码如下:10 x 5 ${10 * 5}2 * 3 则以下正确的是?A. JSP页面转换时发生错误B. JSP页面转换成…

win10搜索框没反应怎么修复

1、任务管理器中,点击文件,选择运行新任务。 2、在运行新任务窗口输入PowerShell,勾选以系统管理权限创建此任务,点击确定。 3、在PowerShell终端中,输入命令并执行, Get-AppXPackage -AllUsers | Foreac…

java axis2 教程_webservice的Axis2入门教程java版

本文转自百度文库Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。这些都将在后面的系列教程中讲解。在本文中主要介绍…

如何打开win10 iis管理器

1、同时按住【Windows】【R】快捷键,输入【控制面板】进入控制面板界面。 2、鼠标点击【程序】,选择【启动或关闭windows功能】。 3、将页面的相应选项进行勾选,再点击【确定】就可以打开iis管理器了。 4、返回控制面板界面,鼠标…

java 获得响应内容_Java 纯HTTP Get请求获取响应内容,如果302,继而获取重定向后的响应内容。...

标签:public static void main(String[] args) {try {StringBuffer buffer new StringBuffer();String url "http://localhost:8080/istock/login?uname&ppass";System.out.println("访问地址:" url);//发送get请求URL serverUrl new …

win8的开始菜单不见了怎么办

win8的开始菜单不见了怎么办?下面解决Win8开始菜单不见了的方法分享给大家。 一、开始菜单的图标不见了 Win8开始菜单不见了的情况有很多种,而不少用户是Win8开始菜单的图标不见了,可通过重新下载安装解决,具体步骤如下: 1、前…

java null和 的区别_java中null和的区别

null和""的区别问题一:null和""的区别String snull;string.trim()就会抛出为空的exceptionString s"";string.trim()就不会抛,为什么?答:NULL代表声明了一个空对象,根本就不是一个字符串。""代表声…

Elastic Search的RestFul API入门:如何进行ES的查询-search

在这篇教学文章中,我们将深入探讨Elasticsearch的search功能。这是一个非常强大且灵活的功能,它允许我们对存储在Elasticsearch中的数据进行各种复杂的查询和分析。本章的目标是让读者理解如何进行Elasticsearch的搜索,以及如何在搜索过程中自主调整搜索参数,从而灵活地控制…

没光驱怎么重装电脑系

不少用户不知道没光驱怎么重装电脑系统,下面就一起具体了解下。 1 第一步 打开云骑士装机大师,选择启动U盘界面,并且在电脑上插入U盘,点击制作U盘启动盘开始制作 没光驱怎么重装电脑系统 2 第二步 接着就进入了选择系统的界面&a…

java中的字符串_java中字符串的操作

//创建一个字符数组char[] charArr {a,b,c,d,e,f,g};//创建一个字符串String str new String(charArr);System.out.println(str);String aStr "abcdefg";//字符串的比较boolean results str.equals(aStr);System.out.println(results);//或得所在索引的字符char …

java中的io复用_从 Java 中的零拷贝到五种IO模型

在之前的文章中,我们聊过了 Java 中的零拷贝,零拷贝就是指数据不会在内核空间和用户空间之间相互拷贝。这样就减少了内核态与用户态的切换,自然就很高效。拷贝文件只是 IO 操作中一个特殊的情况,大多数的 IO 操作还是需要将数据从…

如何用u盘装系统

U盘的出现让生活和工作都变得便捷起来,遇到需要重装系统时,我们又应该如何用u盘装系统呢? 1 第一步 打开云骑士装机大师,选择启动U盘界面,并且在电脑上插入U盘,点击制作U盘启动盘开始制作 如何用u盘装系统 2 第二步…

java 图像梯度检测_数字图像处理-边缘检测

梯度介绍首先介绍边缘检测中用到的高等数学原理---梯度。介绍梯度,离不开方向导数。方向导数顾名思义,方向导数就是某个方向上的导数。什么是方向:函数在这个方向上的图像:我们知道:函数的点在这个方向上也是有切线的&…

2021-04-19

电脑系统重装后没有声音怎么办,下面与大家分享下系统重装后没有声音怎么解决的教程。 1 第一步 鼠标右键单击此电脑,选择管理进入页面,单击设备管理器,展开声音、视频和游戏控制器,查看设备是否有问号,如果…

电脑换硬盘要重装系统吗

不少用户想知道电脑换硬盘了,还要重装系统吗? 一、如果这个硬盘是全新的,换到另一台主机上,这时是需要重装系统的,可以使用U盘来安装系统。 电脑换硬盘要重装系统吗 二、如果硬盘里已有系统,而且系统能够正常使用&…