我在销毁会话时遇到了一些问题。当我摧毁会话时它会不断回来。
我使用的代码如下:
public function kill_login(){
global $response;
session_start();
$response->message = "Current session" . json_encode($_SESSION);
// Unset all of the session variables.
unset($_SESSION);
$_SESSION = array();
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_destroy();
session_write_close();
$response->message .= "Session Destroyed" . json_encode($_SESSION);
}
回复以下
使用ASync AJAX请求调用此方法然后重新加载
$("<button>").text("Logout").click(function(){
var logOut = {
action:"logOut"
};
alert(SAJAX.getJSON(logOut,dataLoc).message);
location.reload();
})
(SAJAX.getJSON只是一个简化使用AJAX来处理我的标准请求的方法,我使用它很多就好了)
页面然后重新加载,不知何故会话仍在那里,我可以再次点击退出按钮,仍然可以得到相同的东西。
我只在三个地方使用session_start()
:检查登录(为页面建立会话),登录并终止登录,因为它是一个AJAX请求。
任何想法?
编辑:我调整它以删除第二个session_start()并添加write_close相同的结果。
答案 0 :(得分:0)
问题不在PHP中,调用location.reload();
会重新发送POST数据。由于登录页面立即对页面进行了POST,因此注销调用会破坏会话,然后由于重新发送页面的POST而启动登录方法,因此正在创建新会话。
将location.reload()
更改为window.location.href = "logon.php";
可解决此问题,因为该页面不再发送POST数据。