mysql数据库保存session教程_如何使用数据库保存session的方法简介

使用数据库保存session的方法

php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当一个用户由于某种安全原因关闭了浏览器的cookie,程序中的session相关操作将无法执行。因此,如果能以数据库保存session数据,将不受客户端设置的限制,并且在性能和扩展性等方面有一个飞跃。程序中使用关键函数是session_set_save_handler,同时要将php.ini里的session.save_handler = files 改为 user。这里我们讨论的环境是linux(freesd)+apache+mysql+php。

数据表结构:[sessions]

CREATE TABLE sessions (

sesskey char(32) not null,

expiry int(11) unsigned not null,

value text not null,

PRIMARY KEY (sesskey)

);

程序代码:[session_inc.php]

$SESS_DBHOST = "yourhost"; /* database server hostname */

$SESS_DBNAME = "yourdb"; /* database name */

$SESS_DBUSER = "youruser"; /* database user */

$SESS_DBPASS = "yourpassword"; /* database password */

$SESS_DBH = "";

$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

function sess_open($save_path, $session_name) {

global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;

if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {

echo "

Can't connect to $SESS_DBHOST as $SESS_DBUSER";

echo "

MySQL Error: " . mysql_error();

die;

}

if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {

echo "

Unable to select database $SESS_DBNAME";

die;

}

return true;

}

function sess_close() {

return true;

}

function sess_read($key) {

global $SESS_DBH, $SESS_LIFE;

$qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry > " . time();

$qid = mysql_query($qry, $SESS_DBH);

if (list($value) = mysql_fetch_row($qid)) {

return $value;

}

return false;

}

function sess_write($key, $val) {

global $SESS_DBH, $SESS_LIFE;

$expiry = time() + $SESS_LIFE; //过期时间

$value = addslashes($val);

$qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')";

$qid = mysql_query($qry, $SESS_DBH);

if (! $qid) { 

$qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();

$qid = mysql_query($qry, $SESS_DBH);

}

return $qid;

}

function sess_destroy($key) {

global $SESS_DBH;

$qry = "DELETE FROM session_tbl WHERE sesskey = '$key'";

$qid = mysql_query($qry, $SESS_DBH);

return $qid;

}

function sess_gc($maxlifetime) {

global $SESS_DBH;

$qry = "DELETE FROM session_tbl WHERE expiry < " . time();

$qid = mysql_query($qry, $SESS_DBH);

return mysql_affected_rows($SESS_DBH);

}

session_set_save_handler(

"sess_open",

"sess_close",

"sess_read",

"sess_write",

"sess_destroy",

"sess_gc");

session_start();

?>

完成以上步骤后,在程序中使用require("session_inc.php")来代替session_start()即可,其他的session函数还是象以前一样的方法调用

双L5520 4*1T RAID 10 48G 10M 128ip 特价1800元/月 .联系老张-2881064151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤将PDF文件保存MySQL数据库中: 1. 在MySQL数据库中创建一个表,其中包含一个BLOB类型的列,用于储PDF文件的二进制数据。 2. 在Java中使用MyBatis访问数据库,并创建一个包含PDF文件二进制数据的字节数组。 3. 将字节数组插入到MySQL表中的BLOB列中。可以使用MyBatis的insert语句来执行此操作。 以下是示例代码: ``` // 读取PDF文件并将其转换为字节数组 File file = new File("path/to/pdf/file.pdf"); byte[] pdfData = Files.readAllBytes(file.toPath()); // 创建MyBatis的SqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); // 获取数据库会话 try (SqlSession session = sessionFactory.openSession()) { // 创建一个Mapper对象 PdfMapper mapper = session.getMapper(PdfMapper.class); // 创建一个Pdf对象,并将字节数组设置为PDF数据 Pdf pdf = new Pdf(); pdf.setData(pdfData); // 将Pdf对象插入到数据库中 mapper.insertPdf(pdf); // 提交事务 session.commit(); } ``` 其中,PdfMapper类定义了一个名为insertPdf的方法,用于将Pdf对象插入到数据库中。该方法可以在MyBatis的Mapper XML文件中实现。例如: ``` <insert id="insertPdf" parameterType="com.example.Pdf"> INSERT INTO pdfs (data) VALUES (#{data, jdbcType=BLOB}) </insert> ``` 请注意,这只是一个示例代码,你需要根据自己的实际情况进行调整。另外,为了确保安全性,建议在将PDF文件储到数据库之前对其进行验证和过滤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值