3

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

我是否还需要使用 session_destroy,因为我只想在用户通过我的联系页面提交 php 表单时创建会话?

谢谢。

更新:为了更好地了解我的表单而不发布冗长的代码。

联系表格.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>

表单-process.php

<?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');
}
?>
4

2 回答 2

4

创建会话的开销微乎其微,如果您只想在用户发帖时使用会话,则session_destroy()可以将其放在检测帖子的块中而不是放在脚本的顶部,但没有真正的理由需要这样做。session_start()

于 2013-04-21T14:42:27.657 回答
2

如果您只想在用户提交特定表单时创建会话,请按照您的描述进行操作。不需要放在session_start()网站的每个页面上,也不需要放在文件的第一行(它只需要能够生成 cookie,因此它需要在任何输出之前)。

// contact-form.php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
    session_start();
    // ...
}

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

于 2013-04-21T15:13:50.910 回答