PHP - 结束会议

时间:2016-01-10 01:13:14

标签: php session

我已阅读this主题,因为我想知道是否可以远程关闭会话。我可能不完全理解这个话题,所以请告诉我。

理想情况下,如果有人登录到我的应用程序然后使用不同的PC再次登录 - 我想在不使用数据库的情况下关闭其他会话。

我已经用过了:

session_start();
session_id($ns);
session_destroy();
ob_start(); 
session_start();
session_regenerate_id();

但它实际上并没有破坏会话。我做错了吗?

- 编辑

忘了添加一些细节。我只想联系数据库一次 - 当人再次登录时 - 然后将当前的session_id添加到$ns变量。

但我不想在每个页面上访问数据库。在我登录某人之前,我正在从DB读取会话并尝试销毁它并开始新的会话。

更改了session_start()session_id($ns)的顺序,仍然无法执行此操作

2 个答案:

答案 0 :(得分:2)

指定会话ID时,{/ 3>}必须在 session_start()之前调用

如果您希望在用户登录时将其从其他已登录的会话中注销,则您将不得不做更多的工作,很可能涉及数据库。否则,你无法知道要销毁哪个会话。

通常没有必要在再次访问会话之前实际销毁会话,因此,只需要获取会话ID就可以销毁会话,这比必要的工作更多。但是如果你真的想这样做,那么你应该将用户的会话ID存储在数据库中,并使用它来销毁他们之前的会话。

更好的方法是在会话和数据库中存储某种类型的令牌(唯一字符串,登录时间或其他内容),然后可以在每个页面访问时验证这些令牌。如果数据库中的令牌与会话中的令牌不匹配,则会话是旧的/无效的,并且用户可以在那时注销。

答案 1 :(得分:1)

在用户登录时将$ _server [' remotehost']存储在数据库的用户表中。

然后在每次用户访问您的应用程序时将其与当前主机进行比较。

如果他们不匹配则销毁当前会话并要求用户再次登录。