不朽的PHP会话

时间:2016-08-30 13:50:09

标签: php jquery ajax session

我在销毁会话时遇到了一些问题。当我摧毁会话时它会不断回来。

我使用的代码如下:

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);
}

回复以下

Returning 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相同的结果。

1 个答案:

答案 0 :(得分:0)

问题不在PHP中,调用location.reload();会重新发送POST数据。由于登录页面立即对页面进行了POST,因此注销调用会破坏会话,然后由于重新发送页面的POST而启动登录方法,因此正在创建新会话。

location.reload()更改为window.location.href = "logon.php";可解决此问题,因为该页面不再发送POST数据。