php 如何用session_id 获取指定session?

业务场景,公司老项目,与客户端的会话连接用sessionid 搭建的。
现在要做一个顶号踢下线的功能

1.建立相关数据表,记录用户的sessionid, uid, 在线状态
2.当用户在其他客户端登录同一账号时,更改数据库,将上次登录的session 注销掉

代码构思如下:


$presid = session_id();
$othersid = session_id('soupivi4v3qhkfj2vjennnsbt6'); 

这两个sessionid 拿到的值都是一样的?
请教,why?

我知道应该用JWT做,but,老项目, 现在是session。

阅读 5.4k
3 个回答
在 session_start() 之前设置看看

我测试了下,第二个是赋值,返回之前的,你再取一次就是最新的
echo session_id();
echo '
';
session_id('l04102bnof3k50g3q8l1boovo5');
echo session_id();
die();

然后就是,使用别人的session_id只是暂时使用,刷新之后,session_id就变回原来的了,对该session_id文件的session内容可以进行操作
session_destroy();
unset($_SESSION);
这两个是不起作用的,可以采用赋值的方式覆盖。
比如:$_SESSION['info'] = array('user_name'=>'jim','user_id'=>'123');
可以用$_SESSION['info'] = array();来清空值

我觉得要实现这个功能的话,最好在增加一个你能够把握的标识,因为你无法去操作之前的session。思路说一下,登录之后增加在redis中增加一个uid对应的hash值,这个值配合session同时有效才算登录状态。此时你需要session_save_handler重新写一下。因为,php好像只能对当前的session进行操作,不能对其他的session进行操作。这也是安全吧,毕竟你拿到其他session之后如果能够对其他session进行操作的话,太恐怖了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题