我已阅读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)
的顺序,仍然无法执行此操作
答案 0 :(得分:2)
指定会话ID时,{/ 3>}必须在 session_start()之前调用。
如果您希望在用户登录时将其从其他已登录的会话中注销,则您将不得不做更多的工作,很可能涉及数据库。否则,你无法知道要销毁哪个会话。
通常没有必要在再次访问会话之前实际销毁会话,因此,只需要获取会话ID就可以销毁会话,这比必要的工作更多。但是如果你真的想这样做,那么你应该将用户的会话ID存储在数据库中,并使用它来销毁他们之前的会话。
更好的方法是在会话和数据库中存储某种类型的令牌(唯一字符串,登录时间或其他内容),然后可以在每个页面访问时验证这些令牌。如果数据库中的令牌与会话中的令牌不匹配,则会话是旧的/无效的,并且用户可以在那时注销。
答案 1 :(得分:1)
在用户登录时将$ _server [' remotehost']存储在数据库的用户表中。
然后在每次用户访问您的应用程序时将其与当前主机进行比较。
如果他们不匹配则销毁当前会话并要求用户再次登录。