【问题标题】:Cookie is being destroyed after reload重新加载后cookie被销毁
【发布时间】:2019-12-10 02:56:42
【问题描述】:

我有一个 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 正在被销毁?谁能提供一些关于为什么以及如何解决这个问题的想法?

提前致谢!

【问题讨论】:

    标签: php wordpress cookies


    【解决方案1】:

    对每个请求执行初始化操作。您每次都在覆盖它。

    只有在有用户的情况下才应该设置 cookie,例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2020-09-18
      • 2015-03-14
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多