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

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

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

谢谢.

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

接触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>

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

解决方法:

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

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

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...