2013-03-19 71 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