2017-07-02 61 views
0
/** LOGOUT PROCESS **/ 
case logout: 
    if(isset($_SESSION['user'])){ 
     unset($_SESSION['user']); 
     if(!empty($_COOKIE['remember'])){ 
      list($selector, $authenticator) = explode(':', $_COOKIE['remember']); 
      $stmt = $db->prepare('DELETE FROM user_token WHERE selector = :selector'); 
      $stmt->execute(['selector' => $selector]); 
     } 
     if(isset($_SERVER['HTTP_COOKIE'])){ 
      $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
      foreach($cookies as $cookie) { 
       $parts = explode('=', $cookie); 
       $name = trim($parts[0]); 
       setcookie($name, '', time()-1000); 
       setcookie($name, '', time()-1000, '/'); 
      } 
     } 
    } 
    header("Location: ".site_url,true,303); 
    exit(); 
    break; 

我有上面的代码,用户访问:example.com/user/logout运行此过程。在我测试时,我注意到如果我输入example.com/user/lo,我的浏览器建议我去example.com/user/logout,因为这是我访问的最后一页。它的功能使我在没有访问url的情况下登录(浏览器,如果有人向我建议,我会访问它)。我不希望这种事发生!我想在请求注销以防止它出现之前设计一个弹出警报。但我可以使用的其他选项是什么,以便用户在访问该页面时不会立即注销?我看到有人在尝试注销之前不显示警报的网站。他们在后端做什么?退出代码运行,如果浏览器提示url

+0

仅退出'发布'请求。 – Federkun

+0

@Federkun听起来不对。这意味着我必须为我的注销按钮'

' – shnisaka

+0

'''''''用户只需在某处添加“”即可注销其他用户。至少,在查询字符串上添加一个'csrf/token'。 – Federkun

回答

0

您可以使用post方法或ajax请求相同。目前,您正在使用简单的get方法,并且检查用户是否登录,只需注销用户即可。
1->您可以使用任何特定密钥的注销功能的发布请求。
2->您可以在页面上使用与实现ajax相同的功能。
您可以根据您的选择使用任何方法。