![](/img/trans.png)
[英]PHP $_SESSION works on WAMP but not on my Server with exact same code, why?
[英]why is php generating the same session ids everytime in test environment (WAMP)?
我已经在我的系统中配置了wamp,并且正在本地环境中进行开发和测试。 我正在研究注销功能,并且碰巧注意到生成的会话ID在浏览器中是相同的。
例如 - 即使在注销并登录后,chrome也会为所有用户生成会话ID = abc; IE总是为所有用户生成session id = xyz。
这是wamp /我的测试环境的问题吗?
请在下面找到我的注销php脚本 -
<?php
session_start();
$sessionid = session_id();
echo $sessionid;
session_unset();
session_destroy();
?>
您可能仍然拥有包含旧会话ID的cookie,因为session_unset
和session_destroy
都没有删除该cookie:
为了完全终止会话,比如要将用户注销,还必须取消设置会话ID。 如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie。
setcookie()
可能会用于此。
因此,在注销后使用setcookie
使会话ID cookie无效:
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
另一个建议是使用session_regenerate_id(true)
在成功验证后重新生成会话ID。
将工作。 请试试这个
session_start();
session_regenerate_id(TRUE);
session_destroy();
您必须使用函数session_regenerate_id()
重新生成会话ID。 没有它,会话ID在页面刷新之间是相同的。
session_destroy()销毁与当前会话关联的所有数据。 它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。 要再次使用会话变量,必须调用session_start()。
为了完全终止会话,比如要将用户注销,还必须取消设置会话ID。 如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie。 setcookie()可能会用于此。
session_unset()
和session_destroy()
不会删除会话cookie。 您必须使用setcookie()
调用手动取消设置它。
session_unset与session_register()
相反,session_destroy只是清除$ _SESSION而不影响cookie。
从手册 (session_destroy):
session_destroy()销毁与当前会话关联的所有数据。 它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。 要再次使用会话变量,必须调用session_start()。
为了完全终止会话,比如要将用户注销,还必须取消设置会话ID。 如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie。 setcookie()可能会用于此。
除非您专门取消设置cookie,否则cookie仍然存在,并且下次调用session_start()时,它将使用它作为会话ID。 关闭浏览器也应该清除cookie,因为它们通常由php设置为在浏览器关闭时到期。
要停止会话劫持,请按照PHP中的以下代码进行操作
session_start();
/* to stop session hijacking */
// Generate new session without destroying the old one
session_regenerate_id(false);
// Fetch current session ID and close both sessions to allow other scripts to use them
$newSession = session_id();
session_write_close();
// Assign session ID to the new one, and start it back up again
session_id($newSession);
session_start();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.