如果我在顶部有一个带有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');
}
?>
答案 0 :(得分:4)
创建会话的开销微乎其微,尽管你可以将session_destroy()
放在检测帖子而不是脚本顶部的块中,但你没有必要session_start()
。如果你只想在用户发帖时使用会话。
答案 1 :(得分:2)
如果您只想在用户提交某个表单时创建会话,请按照您的描述进行操作。将session_start()
放在网站的每个页面上并不是必须的,它不需要是文件的第一行(它只需要能够生成一个cookie,因此它需要在任何输出之前。
// contact-form.php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
session_start();
// ...
}
HTTP的无状态特性使得如果用户尚未完成某项任务,则无法主动删除会话。但是,如果您不在网站的其他部分加载会话,则会话文件将在到期时间后的下一次垃圾回收中删除,即使用户仍在浏览您的网站。除此之外,会话只是一个微小的文本文件,无害地放在临时目录中。