3

我正在尝试使用以下代码从 PHP 网站注销:

<?php
session_start();
if(isset($_GET['logout']))
{
   $_SESSION=array();
   if($_COOKIE[session_name()])

   {
    setcookie(session_name(), '', time()-42000, '/');
   }
session_destroy();
header('Location: login.php');
}

?>

该页面被重定向到登录页面,但是当我单击浏览器的后退按钮时,我能够看到上一页。请提出一个可以解决此问题的综合解决方案,因为在各种帖子中,我无法找到用户可以完全注销 php 网站的解决方案。(如果可能,不使用 javascript)。即使在注销后按下后退按钮,我也想在登录页面上。

4

4 回答 4

2
session_start(); 
session_unset(); 
session_destroy(); 
header ('location:login.php?message=logout');
于 2013-06-27T20:59:08.090 回答
0

Add a statement at the beginning of your "page", which checks for the session credentials, and if they do not exist, it redirects the user to the login page, else, it loads the page.

To actually write the conditional block for you, I would need the actual php, but something along the lines of...

If Session is False

Scripting to redirect browser to Login Page

Else

Load Page

End If

于 2013-06-27T20:14:56.483 回答
0

如果您的代码使用 AJAX 注销,那么 usingsession_start()会启动一个全新的会话,而不是继续您正在使用的会话。

如果您使用 AJAX,请在用户登录时执行以下操作:

#start a new session
session_start();
#save the session id into a cookie
setcookie('SESSID', session_id(), 0, '/');

现在您的会话已保存,为了注销,请尝试以下代码:

if(isset($_COOKIE['SESSID']))
{
    #retrieve the previous session id
    session_id($_COOKIE['SESSID']);
    session_start();

    #destroy the session
    session_destroy();
    setcookie('SESSID', NULL, time() - 3600, '/');
}
于 2013-06-27T20:24:34.427 回答
0

尝试将此添加到您的代码中,它应该有助于防止缓存。

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
于 2013-06-27T18:06:25.493 回答