【问题标题】:How to unset session without reloading page如何在不重新加载页面的情况下取消设置会话
【发布时间】:2013-05-16 10:08:23
【问题描述】:

我想在不重新加载页面的情况下注销用户,只需更新一些 div。这就是我所拥有的,但显然没有工作。只有在重新加载页面后会话才会取消。

$.ajax({
        url: "logout.php",
        method: "post",
        data: "account_type=twitter",
        success: function () {

        /*****do something***********/  
    }
});

在logout.php中

<?php
    session_start();

    if(isset($_POST['account_type']) && $_POST['account_type'] == "twitter") {

        unset($_SESSION['twitterId']);
        unset($_SESSION['twitterName']);
        unset($_SESSION['twitterPic']);
        unset($_SESSION['twitterUrl']);
        unset($_SESSION['access_token']);
        unset($_SESSION['token_oauth']);

        header("Location: index.php");
    }
?>

我们将不胜感激。谢谢!

【问题讨论】:

  • 什么意思(只有在重新加载页面后会话才会取消。)??我认为会话已经未设置,但没有什么可以告诉当前页面您已经注销。是这样吗??
  • 注销不会更改页面上已有的内容。您将需要重新加载页面以显示新内容 IE 旧登录内容仍将显示,因为它不会自动更改,因为您已使用 ajax 注销,除非您当然要重新加载所有未记录内容的 div也使用 ajax。
  • @Anigel 你的意思是如果我动态地重新加载包含条件的div(如果设置了seession)这会起作用吗?我试试看!
  • 基本上是的。在您重新加载内容之前,它仍然会一直说您已登录。仅注销不会更改页面上的任何内容,除非您重新加载页面或要更新的内容。
  • 现在可以使用了。谢谢!

标签: php ajax


【解决方案1】:

从技术上讲,您所做的并没有错。

问题在于注销会更改已显示的内容。

当您通过 ajax 调用注销用户时,旧的登录内容仍将显示在页面上,直到您实际重新加载整个页面或重新加载显示登录内容的 div 的内容.

例如,如果您有一个显示You are logged in 的框,则仅通过 ajax 注销不会更改该内容,直到您使用 ajax 重新加载该 div 或重新加载整个页面,以便服务器然后告诉页面您未登录在。

已发送给用户的内容将始终保持原样,除非您在注销后使用 ajax 或通过重新加载页面上的所有内容专门更改它。

【讨论】:

    【解决方案2】:
    <?php
        session_start();
    
        if(isset($_POST['account_type']) && $_POST['account_type'] == "twitter") {
    
            session_destroy();
    
            header("Location: index.php");
        }
    ?>
    

    【讨论】:

    • 虽然这会破坏会话,但它并没有解决 OP 的问题,即即使在“注销”后仍然显示登录内容。
    【解决方案3】:

    会话正在被 ajax 调用取消设置,但您需要在成功注销 ajax 调用后相应地操作 div,例如隐藏用户名、放置登录按钮或删除任何用户区域......

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2012-02-23
      相关资源
      最近更新 更多