PHP7 自带的 session 哈希算法变了,取不到 sessionid 怎么办?

2017-09-20 21:22:23 +08:00
 hheedat

PHP 自带 session + memcached 这种的。

PHP56 升级 PHP7,发现 session 自带的哈希算法变了,sessionid 落到了不同的 memcache 上,如果上线的话,很多用户会失去登录状态(有的还落在原来的 cache 上,有的不行,数量未知),这是不可接受的,有什么好办法吗?

5925 次点击
所在节点    PHP
22 条回复
wellsc
2017-09-20 21:30:40 +08:00
根据 session 时间戳加一层判断新旧会话的判断逻辑
hheedat
2017-09-20 21:52:21 +08:00
@wellsc 自带的没这个功能吧,就算能判断,去那个 cache 查是个黑盒
GTim
2017-09-20 22:00:54 +08:00
@hheedat 看 php5.6.3 这个包 ext/session/session.c l287-l433 这个代码怎么写

或者 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3583605 这边文章,自己写一个算法
runningman
2017-09-20 22:05:28 +08:00
这是一个好问题
gouchaoer
2017-09-20 22:07:28 +08:00
没懂。。。你是说 session 到 memcache 的分片算法变了?
vainl1
2017-09-20 23:15:53 +08:00
@gouchaoer 我理解的是 PHP7 生成 session id 的算法变了,原本 a*** , 升级后 b***,然后题主大概 memcache 用的集群有分片,a*** 本来在 A 机器取得,现在映射到了别的机器,新旧的不一致会取不到。 另外题主可以关注一下 V2EX => 设置 => 关于头像的规则 。
azh7138m
2017-09-20 23:37:17 +08:00
解释一下,如果是男的,不建议使用女性头像,可能会小黑屋
gouchaoer
2017-09-20 23:50:02 +08:00
@vainl1 不,登录用户的 session 只会在登录成功后生成,cookie 会带上 sessionid 过来,所以和 session 生成算法无关。至于 memcache 集群分片算法,那就要去看扩展了,比如有基于 sessionid 取模的等等,改起来应该问题不大。其实用 memcache 集群分片存 session 比较粗暴简单的方法就是,把 memcache 的地址直接放 sessionid 里,比如 abc1hda76__memcache192.168.1.100 这样,当然 host 可以对称加密一下,这样有个好处就是可以水平扩展,某台挂了就踢掉别的不受影响
Niphor
2017-09-21 00:01:17 +08:00
系统近期升级,部分用户可能需要重新登录
升级公告贴 2 天 然后再升级
skydiver
2017-09-21 00:05:10 +08:00
重新登录而已,多大点儿事儿
goodspb
2017-09-21 00:22:56 +08:00
分片都得 ID 竟然不是自己实现算法。。。
hheedat
2017-09-21 00:51:32 +08:00
@vainl1 已经生成的 sessionid,Cookie 中会带过来,PHP 自带的 session 会从配置的多个 memcache 地址中去取,本来应该在 A 地址取,现在变成在 B 地址取了,就取不到了(一部分 sessionid 会受影响,新登录的不会有影响)。

头像是允儿,用很久了,一直没注意规则,已换
hheedat
2017-09-21 00:52:05 +08:00
@goodspb 历史原因
torbrowserbridge
2017-09-21 00:52:50 +08:00
php7 的 session 存储与 memcached 扩展不兼容,已经切换到 redis
dangyuluo
2017-09-21 03:24:05 +08:00
做个通告就好了,这都不是大事。session 里不保存重要信息就可以了
abccccabc
2017-09-21 09:50:35 +08:00
楼主,可以看看这篇文章: http://blog.csdn.net/doomsday0417/article/details/71087420

有新消息记得回复我。
vlean
2017-09-21 09:59:24 +08:00
看下 http://php.net/manual/zh/session.configuration.php
session.hash_function
session.sid_length
vlean
2017-09-21 10:01:12 +08:00
@abccccabc 改成 files 应该不行 只是换了存储方式
owenliang
2017-09-21 11:49:12 +08:00
逐步升级 PHP7,让他们重登就好了。
shibingsw
2017-09-21 14:54:50 +08:00
@skydiver 对!!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX