PHP-在未提交的表单页面上正确销毁会话?

PHP-在未提交的表单页面上正确销毁会话?,php,session,Php,Session,如果我有一个顶部带有session_start()的php联系人表单,我知道这会创建一个会话。但是,如果用户没有填写表单,而是导航到另一个页面怎么办 我是否仍然需要使用session_destroy,因为我只希望在用户通过我的联系人页面提交php表单时创建会话 谢谢 更新:在我的表单上获得更好的想法,而无需发布冗长的代码 contact-form.html <?php session_start(); ?> <?php $fname = isset($_SESSION['fna

如果我有一个顶部带有session_start()的php联系人表单,我知道这会创建一个会话。但是,如果用户没有填写表单,而是导航到另一个页面怎么办

我是否仍然需要使用session_destroy,因为我只希望在用户通过我的联系人页面提交php表单时创建会话

谢谢

更新:在我的表单上获得更好的想法,而无需发布冗长的代码

contact-form.html

<?php session_start(); ?>
<?php $fname = isset($_SESSION['fname'] ) ? $_SESSION['fname'] : NULL ; ?>
<form method="post" action="http://www.mysite.com/form-process.php">
  <input value="<?php echo $fname ?>" type="text" id="fname" name="fname" />
  <input type="submit" value="Submit Request" />
</form>


创建会话的开销很小,没有真正的理由需要
session\u destroy()
尽管您可以将
session\u start()放入
如果您只想在用户发布时使用会话,则在检测post的块中,而不是在脚本顶部。

如果您只想在用户提交特定表单时创建会话,只需按照说明执行即可。在站点的每个页面上放置
session\u start()
不是强制性的,它不需要是文件的第一行(它只需要能够生成cookie,因此需要在任何输出之前)


HTTP的无状态特性使得如果用户尚未完成特定任务,就无法主动删除会话。但是,如果您没有在站点的其他部分加载会话,会话文件将在其过期后的下一次垃圾收集中删除,即使用户仍在浏览您的站点。除此之外,会话只是临时目录上的一个小文本文件。

您的应用程序有多大?创建会话的成本很低,因此我认为99/100不需要关心这一点。您可以检查每次是否提交POST变量(可能带有隐藏字段标识符,以将其与其他表单区分开来)。如果它们不存在,请销毁会话。谢谢您的评论。应用程序只有两页:)。仅在网站的这两个页面上使用session_start()联系-form.php和process-form.php。我相信下面的答案,但解决了我的担忧:)。从未想过这样做。特别是因为多人警告说,在会话_开始()之前绝对没有空间。快速提问,我的contact-form.php文件将帖子发送到form-process.php文件,以处理联系人表单的输入。在这种情况下,您的代码将无法正常工作?因为帖子会转到另一个页面,因此contact-form.php文件不会重新加载以启动会话的IF语句。无法**向浏览器**发送任何空间-这是“在会话_start()之前没有输出”的特殊情况。如果您了解Cookie是如何工作的,您就会意识到,如果您(例如)缩进session_start()行,则没有什么问题。如果您了解我的代码的作用,那么我的代码可以根据您的情况进行调整。它不是用于盲复制+粘贴。我接受您的回答,因为它更详细,并且包含代码建议。我理解您的代码在做什么,但是如果我的form-process.php脚本将用户发送到contact-us.php表单以更正输入的信息,那么我不确定该如何工作。如果存在会话或类似的情况,我是否会将IF语句设置为仅使用会话_start()?联系人表单应该使用POST而不是GET。在您的场景中,如何将填写的信息传输回表单?如果
form process.php
中的代码位于
contact-us.php
之上,那么就更容易了。对于我的回复延迟,我深表歉意。我用一个片段更新了我的主要帖子,基本上展示了我的表单是如何运行并返回表单页面的。请记住,我可能想得太多了,而且做得都错了。谢谢@Oshawott的回复。这是一个艰难的选择,但我接受了另一个答案,因为它提供了更多的细节。
<?php
session_start(); 
$_SESSION['fname'] = $_POST['fname'];
$user = "John" ;
session_write_close(); 
if ($_SESSION['fname'] != $user) {
   header('Location: http://www.mysite.com/contact-form.html');
} 
else {
  $_SESSION = array();
  session_destroy();
  header('Location: http://www.mysite.com/thankyou.html');
}
?>
// contact-form.php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
    session_start();
    // ...
}