【发布时间】:2016-08-30 13:50:09
【问题描述】:
我在销毁会话以进行注销时遇到了一些问题。当我销毁会话时,它会不断回来。
我使用的代码如下:
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);
}
回复如下
这是通过异步 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 相同的结果。
【问题讨论】:
-
您启动了会话,然后将其销毁,然后再次启动。问题来了。
-
您在取消设置的同一页面中开始会话。
-
另外,您只是在调用该函数时才开始会话。将
session_start();作为第一行,n'est-ce pas? -
我只是启动会话来调试值并显示它设置为 []。
-
哦,主啊,我刚刚想通了....... 显然
location.reload()对 POST 数据表示不满。因为我刚从登录页面到达,所以每次我执行location.reload()时都会重新登录。会议快要死了,我每次都在做一个新的。改为window.location.href = "logon.php";