同一会话,不同的浏览器

时间:2017-05-03 02:02:47

标签: php session

我在用户会话中存储主动更改数据需要一致性,即使他们使用其他浏览器或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会话,或者是否会导致任何不可预见的问题,可能与安全相关的问题?我一直无法找到类似的情况或者我自己可靠地测试它并且可以使用一些更有经验的输入

1 个答案:

答案 0 :(得分:1)

正如Xuzrus和nogad评论的那样,基本上回答了问题",你的方法可以在没有任何添加无法预料的后果的情况下工作,至少没有直接的。 session_start()session_write_close()之间丢弃的会话中存储的任何数据当然都会丢失(我猜你没想到),但新的用户实例将被"共享&# 34;用"保存"会话的数据,包含两个"接入点"通常由php处理队列,就好像只是不同的页面一样

如果您正在使用多个PHP实例(多线程),我不确定,我认为php锁定/ tmp中的会话文件会使两个客户想要使用会话的风险同时等待正在进行的处理完成,但需要确认