【问题标题】:restart session in PHP page using HTML <form action method=GET>使用 HTML <form action method=GET> 在 PHP 页面中重新启动会话
【发布时间】:2017-08-02 11:44:36
【问题描述】:

我正在尝试调用函数session_destroy() 并打印一个字符串但没有成功。我试图关注这个帖子calling-a-php-function-within-an-a-tag-anchor-tag 并重定向到另一个页面,但我收到了错误

警告:session_destroy(): 试图销毁未初始化的会话

显然,如果我转到另一个页面,则没有初始化要销毁的会话。我想我应该使用像

这样的功能
function restartSession{
  session_destroy();
  print "SESSION has been destroyed - all session data deleted";
}

并使用 &lt;form action="&lt;?php $_SERVER['PHP_SELF'] ?&gt;" method="GET"&gt; ,但我如何通过使用一个 php 文件来做到这一点?

【问题讨论】:

    标签: php html session


    【解决方案1】:

    GET 可以使用普通的锚标记:

    <a href="http://localhost/lab5.php?restartSession=true">restart Session</a>
    

    然后你也可以把它放到你的 index.php 中:

    if(isset($_GET["restartSession"])){
      restartSession();
    }
    
    function restartSession(){
      if(session_id() == '') {     //check if Session already exists
        print "Only start Session"; 
        session_start();
      }
      else {
        session_destroy();
        session_start();
        print "Session restarted";
      }
    }
    

    【讨论】:

    • 谢谢!它适用于重新启动计数器!但会话 ID 保持不变,并且“会话已启动”附加到会话 ID 中,并且屏幕截图 2 中的信息保持不变,我无法显示屏幕截图 3 中的信息。还有其他想法吗?
    • @sirio 你把代码放在哪里了?将其放在顶部并在输出中添加一个
      以将行彼此分开
    • 如果我这样做,我会收到通知:会话已经开始 - 忽略 session_start(),然后忽略之前的所有代码。该页面应仅显示屏幕截图 3 中的代码,而不仅仅是将其分开。
    • @sirio 您可以将应该在其他情况下显示的 HTML 放在 if 括号中
    • 正如 URL 所说的 action=restartSession 我相信应该使用
      来调用函数
    【解决方案2】:

    我没有看到您的 lab5destroy.php 文件的代码,但我想这段代码来自该页面:

    function restartSession{
      session_destroy();
      print "SESSION has been destroyed - all session data deleted";
    }
    

    如果是这样,您必须在会话销毁之前初始化会话:

    function restartSession{
      session_start();
      session_destroy();
      print "SESSION has been destroyed - all session data deleted";
    }
    

    如果你想在一个页面上销毁会话,你不需要使用表单。 您只需更新您的链接:

    <a href="http://localhost/lab5.php?restart=1">restart session</a> 
    

    在您的 lab5.php 之上,您只需插入以下代码:

    <?php
       if (!empty($_GET['restart'])) {
          session_start();
          session_destroy();
          header('Location: http://'.$_SERVER['HTTP_HOST'].'lab5.php');
       }
    ?>
    

    【讨论】:

      【解决方案3】:

      我的选择:创建一个 head.php 文件,其中包含 session_start(); src 文件夹中的内容,并在每个页面的顶部包含它:

      <?php include "src/head.php"; ?>
      

      稍后在您的项目中,您可以在每个页面上放置 mysql connect、style.css 和其他您想要包含的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-02
        • 2018-07-04
        • 2012-01-13
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多