重新加载后Cookie被销毁

时间:2019-12-09 18:52:23

标签: php wordpress cookies

我有一个wordpress网站,其中有一个表单,用户在其中输入用户名,提交后将其重定向到另一个页面。在此页面中,正在显示数据库中与用户相关的一些数据。我正在尝试创建一个搜索表单,该表单将仅显示与表单输入有关的数据,例如年份或类似内容。

以下是原始表单的代码:

add_action('init', function () {
   $username = ( isset($_POST['luname']) ? $_POST['luname'] : '' );
   //$pass = ( isset($_POST['lupass']) ? $_POST['lupass'] : '' );
   setcookie("usernameCookie", $username, time()+3600, COOKIEPATH, COOKIE_DOMAIN);

   if( isset( $_POST['mysubmitbtn'] ) ) {
      wp_redirect('http://mysite/somedata/');
      exit;
   }
});

这是页面中将用户重定向到的代码:

<?php 
$s=$_COOKIE["usernameCookie"] ;
if ( username_exists( $s ) ) { 
   global $wpdb;
   echo "<b>user: ".$s."</b>";
   echo 
    '<form method="post" name="myForm">
        <input type="text" name="year" placeholder="Year"/>
        <input type="submit" value="Search" name="srchbtn"/>
    </form>';
   $year = ( isset($_POST['year']) ? $_POST['year'] : '' );

   if( isset( $_POST['srchbtn'] ) ) {
       $year = $_POST['year'];
       $results = $wpdb->get_results($wpdb->prepare("Select * From mytable Where user_login = %s and year = %d", $s, $year)); 
       foreach ( $results as $result ) { 
          echo 
            '<div style="text-align: left;"><br>
                <span style="font-family: Arial;">'.$result->description.'</span>
            </div>'; 
       }
   }
   else {
      $results = $wpdb->get_results($wpdb->prepare("Select * From mytable Where user_login = %s", $s)); 
       foreach ( $results as $result ) { 
          echo 
            '<div style="text-align: left;"><br>
                <span style="font-family: Arial;">'.$result->description.'</span>
            </div>'; 
        } 
    } 
} 
else echo '
<h3 style="text-align: center; color: red;">Username '.$s.' does not exist.</h3>';

?>

问题是,如果我刷新此页面,则数据丢失并且显示“用户名不存在”,因此,为了使用户查看数据,他必须返回到原始页面并提交用户名再次。如果他以表格形式提交年份,也会发生这种情况,这是否意味着cookie被销毁了?谁能提供一些有关为什么以及如何解决问题的思路?

谢谢!

1 个答案:

答案 0 :(得分:0)

在每个请求上执行init动作。您每次都会覆盖它。

您仅应在有用户的情况下设置cookie,例如:

if ($username) {
  setcookie("usernameCookie", $username, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
}