我正在用PHP开发一个Web应用程序,用户可以拥有自己的帐户,并且跟踪用户的会话存储在MySQL数据库中。现在,在搜索关于如何实现这个的答案之后,我发现许多人都喜欢使用session_destroy()
并取消设置cookie。为什么 - 会不会session_destroy()就足够了?即使the PHP manual说“为了完全杀掉会话,就像登录用户一样,会话ID也必须未被设置。”在从PHP会话注销期间取消设置Cookie的要点是什么?
我的推理:在用户注销并恰好在离开之前再访问您网站上的另一个页面后,PHP脚本检查用户是否登录会调用session_start(),设置新会话无论如何都是用户的cookie。下面是它看起来像:当然
// here we include some scripts and make some instances we'll need
require_once("database.php");
require_once("session.php");
$database_connection = new DB_Connection();
$session = new Session($database_connection);
// here a session cookie is sent to a user, even if he or she isn't logged in
session_start();
// finally we check if the user is logged in
$log_isLogged = false;
if(isset($_SESSION['member_id'], $_SESSION['username'])){
$log_member_id = $_SESSION['member_id'];
$log_username = $_SESSION['username'];
$log_isLogged = true;
}
,它是当用户知道这个事实,并离开现场前,一个新的cookie可以被设置好的。但是有些网站甚至会在注销后直接将您重定向到新页面,导致创建新的会话cookie - 取消您刚才的操作。
我的推理是否存在某些方面的缺陷,或者,如果您没有设置会话cookie,它是否无关紧要? 也许大多数开发人员只是认为它至少不能伤害它来解决它?
我不是母语的人,所以我提前为任何错误和语法错误表示歉意。
好吧,谢谢你,我会考虑这样做 - 你知道我怎么会去阻止这种情况的发生?也许可以在每个网页浏览中更改SID,或者至少在登录后直接更改SID? – Muuse
我明白1,3,4和5.现在读完他们后,他们似乎很明显。但是,我仍然不明白cookie的设置会有多大的不同,只要所有的数据在服务器端被删除。我的意思是,当不取消cookie设置时,由于session_destroy(),所有数据在服务器端仍然会被销毁。用户在浏览器中会留下一个SID作为cookie,当然,但是服务器无法识别的是登录的。这有什么害处?我会看看你提供给我的链接。非常感谢!! – Muuse
@laph:认为#2是买二手手机。即使您使用自己的SIM卡,手机的IMEI也会保持不变,并且您的手机流量可以被知道IMEI的人员(例如向您出售手机的人员)捕获。为了保证您的会话不会被劫持,您必须更改与会话相关的所有事件,包括其ID。 –