在PHP中远程销毁会话(用户登录其他地方)?

twi*_*xel 21 php session logout

嘿,当同一个用户登录其他地方时,我正试图让我的php网站基本上"注销"(session_destroy()).有没有办法做到这一点?远程销毁特定会话?

谢谢你们!

斯科特

Jon*_*Jon 28

使用它当然是可能的session_id.当用户登录其他位置时,您可以在为新登录启动新会话之前执行此步骤:

// The hard part: find out what $old_session_id is

session_id($old_session_id);
session_start();
session_destroy();

// Now proceed to create a new session for the new login
Run Code Online (Sandbox Code Playgroud)

这将破坏服务器端的旧会话,因此当另一台计算机再次访问您的应用程序时,它将尝试访问不存在的会话,并为其创建一个新会话(用户不再登录) .

困难的部分是找出"旧"会话的ID.没有一种通用的方式可以做到这一点; 你需要有一些机制,以便能够告诉id为XXX的会话属于现在登录的同一用户.如果您正在使用数据库会话,这应该很容易.

  • @ dieselpower44:那可行.但要小心:如果用户A的会话在没有明确注销的情况下到期,则数据库中的行将包含旧的会话ID(您将无法删除它).用户B将来可能会重用该会话ID,因此当用户A再次登录时,您最终可能会将用户B记录下来.不太可能,但请注意,这不是一个万无一失的方法. (4认同)
  • 说实话,我想我会用这个!我想也许我要做的就是登录,将会话存储在数据库的用户行中.然后检查登录时是否设置了该设置,如果是,则使用您建议的代码销毁该会话,并用新的代码替换数据库中的会话ID.谢谢你的帮助! (2认同)
  • 我想也许可以解决你提到的这个问题,在他们登录的UNIX时间在数据库的每个用户行中添加一个额外的字段,并将其添加为会话变量.登录时,检查会话ID和UNIX时间,如果不同,则session_destroy(); 谢谢你的帮助 :) (2认同)