单击链接时销毁 PHP 会话

Posted

技术标签:

【中文标题】单击链接时销毁 PHP 会话【英文标题】:Destroy a PHP session on clicking a link 【发布时间】:2013-07-08 00:54:22 【问题描述】:

此代码有效吗?

<a href="#" onclick="<?php session_destroy();?>">Logout</a>

【问题讨论】:

【参考方案1】:

不,从客户端调用服务器端函数是不合逻辑的,onClick 是客户端发生的事件,所以它不能调用session_destroy()因为它不是服务器端(PHP 函数)客户端可用

【讨论】:

【参考方案2】:

代码错误。您可以使用此代码:

<?php if($_GET['logout']==1) session_destroy(); ?>
<a href="?logout=1">Logout</a>

【讨论】:

【参考方案3】:

不,它不是一个有效的代码。它将在加载 php 页面时破坏会话。

为了在点击时破坏会话,你应该写

<a href="logout.php" >Logout</a>

在logout.php中

session_destroy();

【讨论】:

会话应该在使用 session_destroy() 之前启动。【参考方案4】:

创建一个名为 logout.php 的页面

Logout.php_____

<?php
Session_start();
Session_destroy();
header('Location: ' . $_SERVER['HTTP_REFERER']);

?>

您的页面______

<a href="Logout.php">Logout</a>

【讨论】:

这是正确的做法。应该在销毁会话之前启动会话。【参考方案5】:

该代码在单击链接之前已经破坏了会话,您应该这样做:

html 页面:

<a href="sessiondestroy.php">Logout</a>

Sessiondestroy.php:

<?=session_start(); session_destroy(); ?>

【讨论】:

【参考方案6】:

不,它无效...onclick 是客户端事件。你可以这样做。

     <a href="logout.php">logout</a>

并创建一个名为 logout.php 的文件并包含 session_destroy();声明

       <?php
           session_destroy();

           //do other things... like redirect to a deafault/login page

         ?>

【讨论】:

【参考方案7】:

这样做是可能的。如果您专注于使用 onClick 操作,则可以简单地使用 AJAX。首先,您必须创建 ajax.php,如下所示:

<?php
//AJAX dynamic callback
if(isset($_GET['action']))
    if($_GET['action'] == 'logout')
        //destroy the session
        session_destroy();
        echo 'Logout success!';
        //redirect the user to a default web page using header
        header("location:http://example.com/");
    

?>

然后你会想要创建一个 javascript 文件来告诉 ajax.php 你想注销:

<script>
function logout()
 
 var xmlhttp;
 if (window.XMLHttpRequest)
   // code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   
 else
   // code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   
 xmlhttp.onreadystatechange=function()
   
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     
     document.getElementById("Logoutbutton").innerHTML=xmlhttp.responseText;
     
   
 xmlhttp.open("GET","ajax.php?action=logout",true);
 xmlhttp.send();
 
</script>

无论如何,感谢您使用 StackOverflox,如果您需要其他帮助,请报告它的进展情况:)

TP

【讨论】:

我见过的最复杂的注销。

以上是关于单击链接时销毁 PHP 会话的主要内容,如果未能解决你的问题,请参考以下文章

如何一键销毁php会话

单击浏览器的后退按钮时如何销毁会话

注销按钮上的 PHP 会话销毁

在 PHP 中销毁会话时出错

如何正确启动和销毁会话?

PHP - 关闭浏览器后会话销毁