3

上部に session_start() を含む php 連絡フォームがある場合、これでセッションが作成されることがわかります。しかし、ユーザーがフォームに入力せずに別のページに移動した場合はどうなるでしょうか。

ユーザーが連絡先ページから php フォームを送信したときにのみセッションを作成したいので、まだ session_destroy を使用する必要がありますか?

ありがとう。

更新:長いコードを投稿することなく、フォームのより良いアイデアを得るために。

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>

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 に答える