session存入数据库
[1] nsession.sql
create table mysession( session_key char(32) not null, session_data text, session_expiry int(11), primary key(session_key) );
[2] session_inc.php
<?php function mysession_open($save_path, $session_name) { //echo 'save_path '.$save_path.'<br />'; //echo 'session_name '.$session_name.'<br />'; @mysql_connect("localhost", "root", "171084") //选择数据库之前需要先连接数据库服务器 or die("数据库服务器连接失败"); @mysql_select_db("test") or die("数据库不存在或不可用"); //选择数据库mydb return true; } function mysession_close() { return true; } function mysession_read($key) { //echo 'key '.$key.'<br />'; //@mysql_connect("localhost", "root", "171084") //选择数据库之前需要先连接数据库服务器 //or die("数据库服务器连接失败"); //@mysql_select_db("test") //选择数据库mydb //or die("数据库不存在或不可用"); $expiry_time = time(); //获取Session失效时间 //执行SQL语句获得Session的值 $query = @mysql_query("select session_data from mysession " ."where session_key = '$key' and session_expiry > $expiry_time") or die("SQL语句执行失败"); if($row = mysql_fetch_array($query)) return $row['session_data']; else return false; } function mysession_write($key, $data) { //echo 'write: '.$key.'<br />'; //echo 'data '.$data.'<br />'; // @mysql_connect("localhost", "root", "171084") //选择数据库之前需要先连接数据库服务器 // or die("数据库服务器连接失败"); // @mysql_select_db("test") //选择数据库mydb // or die("数据库不存在或不可用"); $expiry_time = time() + 5; //获取Session失效时间 //查询Session的键值是否已经存在 $query = @mysql_query("select session_data from mysession " . "where session_key = '$key'") or die("SQL语句执行失败"); //如果不存在,则执行插入操作,否则执行更新操作 if(mysql_numrows($query) == 0) { //执行SQL语句插入Session的值 $query = @mysql_query("insert into mysession values('$key', '$data', $expiry_time)") or die("SQL语句执行失败"); } else { //执行SQL语句更新Session的值 $query = @mysql_query("update mysession set " ."session_data = '$data', session_expiry = $expiry_time " ."where session_key = '$key'") or die("SQL语句执行失败"); } return $query; } function mysession_destroy($key) { // @mysql_connect("localhost", "root", "171084") //选择数据库之前需要先连接数据库服务器 // or die("数据库服务器连接失败"); // @mysql_select_db("test") //选择数据库mydb // or die("数据库不存在或不可用"); //执行SQL语句删除Session $query = @mysql_query("delete from mysession where session_key = '$key'") or die("SQL语句执行失败"); return $query; } function mysession_gc($expiry_time) { // echo "gc called "; // @mysql_connect("localhost", "root", "171084") //选择数据库之前需要先连接数据库服务器 // or die("数据库服务器连接失败"); // @mysql_select_db("test") //选择数据库mydb // or die("数据库不存在或不可用"); $expiry_time = time(); //执行SQL语句删除Session $query = @mysql_query("delete from mysession where session_expiry < $expiry_time") or die("SQL语句执行失败"); return $query; } // $domain = ''; //不使用 GET/POST 变量方式 ini_set('session.use_trans_sid', 0); //设置垃圾回收最大生存时间 ini_set('session.gc_maxlifetime', 5); //使用 COOKIE 保存 SESSION ID 的方式 //ini_set('session.use_cookies', 1); //ini_set('session.cookie_path', '/'); //多主机共享保存 SESSION ID 的 COOKIE //ini_set('session.cookie_domain', $domain); //设置用户自定义Session存储 ini_set('session.save_handler', 'user'); session_set_save_handler('mysession_open', 'mysession_close', 'mysession_read', 'mysession_write', 'mysession_destroy', 'mysession_gc'); ?>
[3] test.php
<?php include('session_inc.php'); //包含session_set_save_handler定义的文件 session_start(); $_SESSION['passed'] = true; echo $_SESSION['passed']; ?>
[4]
目前基本可用,但sess_gc没有被执行,不知为何。。。
sess_gc是按一定的概率被调用的。可以设置
session.gc_probability 与 session.gc_divisor 合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率。默认为 1。详见 session.gc_divisor。
session.gc_divisor与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor 默认为 100。
ini_set('session.gc_probability', 50);
ini_set('session.gc_divisor', 100);
还发现PHP牛的一点,如果客户端禁用cookie,只要ini_set('session.use_trans_sid', 1);
它会自动把session id 附在链接后。Session 就可以正常使用了。
相关推荐
总的来说,将PHP的Session保存到数据库是一种增强Session管理的有效方式。通过编写一个自定义的处理器类并使用`session_set_save_handler()`函数,我们可以确保Session数据的安全性和可靠性,同时还能根据项目需求...
标题所提及的"php中将session保存到数据库的函数类代码",就是用来实现这一功能的。这种自定义Session处理方式通常通过`session_set_save_handler()`函数来完成,该函数允许我们注册自定义的Session存储和恢复的...
本文介绍了一个用于将PHP Session保存到数据库的PHP类。这个类可以帮助开发者将用户的会话数据存储在数据库中,而不是像默认情况下存储在文件或临时目录中。这样的做法在分布式应用或负载均衡环境下尤其有用,因为它...
本课程“php.itcast.cn PHP课程-利用read和write将session的数据保存到数据库内”就详细讲解了如何实现这一目标。 首先,我们需要了解PHP的Session处理流程。当用户访问一个启用session的PHP页面时,PHP会生成一个...
4. 客户端保存session ID:浏览器收到响应后,会保存这个session ID(通常作为cookie),并在之后的每次请求中自动带上。 5. 检查session状态:之后,每当用户访问受保护的页面时,服务器会检查请求中的session ID...
总结来说,这些代码实例为如何将PHP session数据存储到数据库提供了一套完整的解决方案,包含了数据库的表结构设计、存储过程以及PHP的自定义session处理函数。这些做法在需要高度扩展性和跨服务器session共享的环境...
另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以我们就绪要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把他们的session保存在一台数据库服务器上就可以保证...
在这个过程中,`read()`和`write()`函数是核心,它们负责与数据库交互,读取和保存Session数据。`gc()`函数则用于定期清理数据库中过期的Session记录,以保持数据库的整洁。 总结来说,Cookie和Session是PHP中处理...
3. `session_data`:保存了session变量的实际数据,是一个文本字段,可以存储任何序列化后的PHP数据结构。 接下来,定义一个名为`session`的类,它实现了PHP的Session Handler接口。这个类有以下方法: 1. `open()...
4. **持久化购物车**:每次购物车操作后,可以将SESSION内容同步到数据库的`cart_items`表,以防止SESSION丢失(如用户关闭浏览器)。 5. **结账**:用户确认购物车内容后,进行结算操作,这可能涉及计算总价、检查...
1. **Session ID**: 当用户访问网站时,服务器会创建一个唯一的Session ID,并通过Cookie的形式存储到客户端。这个Session ID将作为识别特定用户的唯一标识。 2. **Session存储**: 服务器端为每个用户创建一个...
**PHP的Session基础** 在Web开发中,PHP的Session机制是一种非常重要的用户状态...在实际项目中,还需考虑Session的存储方式(默认为文件系统,也可以配置为数据库)、Session超时设置以及防止Session劫持的安全措施。
1. **初始化Session**:类中可能会有一个初始化方法,用于开启Session并设置默认配置,例如设置Session保存路径、生命周期、是否使用cookie等。 2. **设置Session值**:类可能会提供一个`set_session_data`方法,...
【PHP封装的数据库保存session功能类】是一种将用户会话数据存储在数据库中的技术实践,以提高会话管理的安全性和可扩展性。在PHP中,session通常默认存储在服务器的临时文件系统中,但这种方式存在一些缺点,如数据...
如果浏览器支持Cookie,Session ID就会被自动发送回服务器,使得服务器能够识别并恢复之前保存的会话数据。 二、配置PHP Session 1. **启动Session**:在PHP代码中,必须先调用`session_start()`函数来开启一个新...
这个"php注册与登录小Demo"展示了如何利用PHP、session以及数据库来实现这一功能,同时区分管理员和普通用户。这里我们将深入探讨相关知识点。 1. **PHP Session**: PHP session是用于在用户浏览器会话之间存储...
在类MySessionHandler中,我们看到几个私有属性,包括数据库连接对象$dbLink,保存Session的表名$_sessionTable,以及Session名$_sessionName。此外,还定义了一个常量SESSION_EXPIRE,表示Session的过期时间。 ...
在本文中,我们主要讨论了使用PHP语言将Session数据存储到MySQL数据库的过程。这涉及到PHP的内置函数session_set_save_handler(),它允许用户自定义Session的存储方式。通过创建一个类Session,我们能够处理session...