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

此代码有效吗?

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

【问题讨论】:

    标签: php session onclick session-cookies destroy


    【解决方案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

            【讨论】:

            • 我见过的最复杂的注销。
            猜你喜欢
            • 1970-01-01
            • 2012-05-25
            • 2011-11-06
            • 1970-01-01
            • 2013-06-09
            • 1970-01-01
            • 2011-02-01
            • 1970-01-01
            • 2011-10-09
            相关资源
            最近更新 更多