php序列化 mysql_PHP序列化数据存储在mysql db中

我有基于数据库的会话存储解决方案.效果很好!但是我存在一个存储特定类型数据的问题.

我有一个使用CSRF令牌的应用程序.创建表单时,它将为该表单创建一个令牌.令牌是不同类型值的散列(sha256)值.一个副本转到表单,另一个副本存储在会话中.提交表单后,它会比较令牌以确保它们匹配.

下面是使用新数据更新db的destruct函数的示例

UPDATE session_manager SET variables= :variables WHERE 1=1 AND id = :id

array(2) {

[":variables"]=>

string(152) "a:1:{s:4:"CSRF";a:1:{s:8:"register";a:2:{s:5:"token";s:64:"e749603241dec1911ef3a40d98b2f5185d389434060483297394b504cc904ede";s:4:"time";i:1443456816;}}}"

[":id"]=>

string(2) "49"

}

更新声明很好,工作正常.这是我的问题,数据已更新,但您在上面的数据中可以看到的’token’值与下面的db中的值不同(这是数据的二进制下载):

a:1:{s:4:"CSRF";a:1:{s:8:"register";a:2:{s:5:"token";s:64:"b48fc79fc2f51eff765c05476895238a42d9d45b2c1aeb7c6e4582d0381b7f4f";s:4:"time";i:1443456817;}}}

似乎mysql正在改变价值,我不能为我的生活找出问题所在.我试过的解决方案包括:

>序列化

> json_encode

> base64

更改数据库的字符集,什么不是.在db中尝试了不同的字段类型,例如TEXT,Longtext和BLOB.哪个似乎对我不起作用:(

这是db的sql

CREATE TABLE session_manager(

id BIGINT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,

session_id VARCHAR(200),

user_agent TINYTEXT NOT NULL,

variables BLOB NOT NULL,

initial_time DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,

regenerate_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL

);

想到的任何理由?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值