1

こんにちは私は現時点で割り当てチャレンジに自分自身を見つけています基本的に私はチャレンジを完全に実装することができましたが、ブラウズ更新で$_SESSIONスーパーグローバルを変更できるはずです私はすべてのタイプの可能な選択肢を探しましたがどれも見えません動作するために、どんな助けも親切に感謝されますこれは私のコードです私が探しているのはブラウザの更新で$_SESSIONを変更する方法です動作中のバージョンごとにそれは可能であるようです私は他にどの方法を試すべきかわかりませんセッションの設定解除または破棄を試みましたが、フォーム全体が削除されます:

<?php
session_start();

if(!isset($_SESSION['secret'])) {
  $possible_chars = array_merge(range('A','Z'),range('0','9'));
  shuffle($possible_chars);
  $string = substr(implode($possible_chars),0,5);
  $_SESSION['secret'] = $string;
}
else {
?>
  <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>THIS FORM POST TO ITSELF TO BE SURE THE USER ENTERS THE RIGHT INFO</title>
    <IMG SRC="index.php" alt="captcha"/>
  </head>
  <body>
    <h1>Captcha Form</h1> 
    <form method="post" action="index.php">
      <fieldset>
        <ul>
          <li>
            <label for="email">Email</label>
            <br>
            <input name="email" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email']; ?>" />
          </li>
          <li>
            <label for="comments">Comments</label>
            <br>
            <input name="comments" id="comments"  value = "<?php if(isset($_POST['comments'])) echo $_POST['comments']; ?>" />
          </li>
          <li>
            <label for="captcha">Please input CAPTCHA:</label>
            <br>
            <input name="captcha" id="captcha"/>
          </li>
          <li>
            <input type="submit" name="submit" value="Submit My Captcha!"/>
          </li>
        </ul>
        <?php print_r($_SESSION['secret']); ?>
        <br\>
        <br\>
        <?php
        $answer = (isset($_POST['captcha']) ? $_POST['captcha'] : null);
        $email = (isset($_POST['email']) ? $_POST['email']: null);
        $comments = (isset($_POST['comments']) ? $_POST['comments']: null);
        if( !empty( $_POST )) {
          if (strcasecmp($answer,$_SESSION['secret']) != 0) {
            //($_SESSION['secret'] != $answer )
            echo "Fee Fi Fo Fum Fot I smell the blood of an automated bot!";
            //$_SESSION['secret'] = NULL;
            header('captcha_challenge.php');
            //$_SESSION['secret'] = NULL;
          }
          elseif (strcasecmp($answer,$_SESSION['secret']) == 0) {
            //($_SESSION['secret'] == $answer)
            unset ($_SESSION['secret']);
            $_SESSION['email'] = $_POST['email'];
            $_SESSION['comments'] = $_POST['comments'];
            $query = ("INSERT INTO comments (email, content) VALUES ( '$email', '$comments')");
            $results = $db->query($query);
            header('Location:goodMessage.php');
          }
        }
}
?>
4

1 に答える 1

2

これは私が使用するセッションタイムアウトです。

セッションが最初に作成されたとき:

session_start();
$_SESSION['LAST_ACTIVITY'] = time();

新しいページに移動するときにセッションタイムアウトを更新するために他のページで呼び出される関数

function check_timeout($timeout, &$SESSION)
    {
        if (isset($_SESSION['LAST_ACTIVITY']))
        {        
            if((time() - $_SESSION['LAST_ACTIVITY']) > $timeout)
            {
                end_session($SESSION);
            }
            $_SESSION['LAST_ACTIVITY'] = time();
        }
        else 
        {
            end_session($SESSION);
        }
    }

セッションを終了するための別の関数(end_session())があります。パラメータの&を使用すると、関数によってセッションを更新できます。

各ページで、私は次のように呼びます。

session_start();
check_timeout($timeout, $SESSION); 
于 2013-03-19T17:53:56.117 に答える