使用 HTML <form action method=GET> 在 PHP 页面中重新启动会话

Posted

技术标签:

【中文标题】使用 HTML <form action method=GET> 在 PHP 页面中重新启动会话【英文标题】:restart session in PHP page using HTML <form action method=GET> 【发布时间】: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 文件来做到这一点?

【问题讨论】:

【参考方案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 和其他您想要包含的内容。

【讨论】:

以上是关于使用 HTML <form action method=GET> 在 PHP 页面中重新启动会话的主要内容,如果未能解决你的问题,请参考以下文章

form里面的action和method(post和get的方法)使用

使用 HTML <form action method=GET> 在 PHP 页面中重新启动会话

JavaScript动态修改html组件form的action属性

关于form的action路径填写

asp.net开发,form表单,file文件上传

form表单 select属性