【发布时间】:2017-09-30 16:26:56
【问题描述】:
我在用户会话中存储主动更改的数据,即使用户使用其他浏览器或 PC 登录并最终使用新的PHP 生成的 session_id
为了解决这个问题(以及其他原因),我将用户名和 session_id 数据对存储在维护的专用数据库中,然后在 session_start() 之后执行类似(简化)的操作:
$saved_sessid=$db->querySingle("SELECT sessid FROM sessions WHERE user = '".$user."'");
if(!empty($saved_sessid)){
session_write_close();//dump newly generated session
session_id($saved_sessid);//apply database-saved session_id
session_start();//launch the already existing user session
}
这是否可以确保特定用户(基于登录的用户名)仅具有特定的 PHP 会话,或者可能会导致任何不可预见的问题,可能与安全相关的问题?我自己无法找到类似的案例或对其进行足够可靠的测试,并且可以通过一些更有经验的输入来完成
【问题讨论】:
-
它会起作用,但我建议这样做:根据客户 ID 存储数据,然后将该 ID 存储在会话中,这样他们就可以拥有 500 个会话变量(他们登录的机器)但每个都将具有相同的客户端 ID,并从一个源中提取数据
-
在没有看到您的确切代码的情况下,我之前已经这样做过,它的工作方式完全符合您的预期。请注意,尽管serverfault.com/questions/138214/…,PHP 保存会话变量的时间是有限制的
-
@MohammedAkhtarZuberi 它究竟是如何“基于意见”的? “具体问题”是用户会话数据一致性
-
@MohammedAkhtarZuberi 我没有看到相关性。我不是要求任何人“推荐或查找书籍、工具、软件库、教程或其他非现场资源”。 “相反”,我“描述了这个问题”和“到目前为止已经做了什么来解决它”;正是它在第 4 点所说的。
-
@nogad 许多网站也使用
标签、MD5 并且不使用参数化查询。并不意味着它是好的做法或有益的。尽管如此,我还是怀疑你会发现任何使用 RDBMS 进行会话的专业、优质的网站,这不是标准做法,而且我从未在这样做的网站上工作过……无论如何,这个讨论是无声的,因为我们'我都向 OP 提出了我们的意见,我认为我们中的任何一个都不会承认一种做法更好。 o7 伴侣。