2013-03-19 30 views
0

你好,我現在確實發現了自己在一個任務挑戰中,現在基本上我已經能夠完全實現挑戰了,但有一件事我應該能夠改變$瀏覽刷新_SESSION超全球我已經看過所有類型的可能的替代品,但似乎沒有任何工作,任何幫助善意評價這是我的代碼我在尋找的是一個方法,$ _SESSION在瀏覽器刷新每個工作版本這似乎是可能的,我不知道要嘗試哪些其他辦法,我曾試圖取消設置會話或破壞,但它會刪除整個窗體:PHP試圖找出一種刷新瀏覽器刷新會話的方式

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

PHP不知道。到PHP這只是另一個要求。我甚至無法想象它爲什麼會有用。 – Bart 2013-03-19 17:43:54

回答

1

這是一個會話超時我使用。

當會話初始創建:

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); 
+0

實施後這不知道它的作用瀏覽器刷新 – GorillaForce 2013-03-19 19:14:21

+0

@ user2097683當你說瀏覽器刷新,你的意思是點擊刷新按鈕來重新加載網頁,或者你的意思是關閉瀏覽器並重新打開它?它在頁面刷新上起作用,但它不能用於關閉瀏覽器並重新打開。它會工作,如果你關閉你已經加載的標籤,然後回到另一個標籤 – 2013-03-19 21:21:53

+0

是的先生!但我明白了,我想我可以在開始之前做一個$ _SESSION ['value'] = NULL它完美的工作!大家好,謝謝大家! – GorillaForce 2013-03-20 01:02:14