登录表单重新出现在每个页面上

时间:2019-05-10 17:35:13

标签: php forms cookies infusionsoft

我们在每个页面上都有一个Infusionsoft登录表单模式。当用户登录时,模式将被隐藏,并显示页面上的信息,并在刷新时保持显示状态。但是,当用户导航到另一个页面时,即使仍然存在来自登录的cookie,也会再次出现登录表单。这是user-auth.php的代码:

<?php

add_action( 'init', 'user_auth' );

/**
*
*
*/
function user_auth()
{
    if( !isset( $_POST['user-auth'] ) ) {
        return;
    }


    $page_id = 6;

    $code = get_field( 'access_code', $page_id );

    $v_username = isset( $_POST['entryemail'] ) ? $_POST['entryemail'] : '';
    $v_value = isset( $_POST['entrycode'] ) ? $_POST['entrycode'] : '';
    $v_time = isset( $_POST['remember'] ) ? $_POST['remember'] : 0;

    $infusion = new Infusion();
    $user = $infusion->findByEmail( $v_username );

    if( $user && ( $v_value == $code ) ) {

        $time = $v_time ? strtotime('+1 year') : strtotime('+3 day');

        $md5 = user_auth_user_save( $user );

        $url = parse_url( site_url() );
        $path = isset( $url['path'] ) ? $url['path'] : '';
        setcookie( 'website_login', $md5, $time, $path, $url['host'] );

        $GLOBALS['localpopup'] = true;
    }
    elseif( $user ) {
        $GLOBALS['localpopup'] = 'Invalid access code.';
    }
    else {
        $GLOBALS['localpopup'] = 'Your email cannot be found.';
    }
}

表单(login.php):

<?php

$email = isset( $_POST['entryemail'] ) ? $_POST['entryemail'] : '';
$code = isset( $_POST['entrycode'] ) ? $_POST['entrycode'] : '';
$remember = isset( $_POST['remember'] ) ? $_POST['remember'] : false;

$error = '';
if( isset( $GLOBALS['localpopup'] ) ) {
    $error = $GLOBALS['localpopup'];
}

?>
<div class="form-code-wraper" id="code-login">

    <span class="logo-popup"><img src="<?php echo THEMEURL ?>images/logo.png" alt="Pointy"/></span>

    <h1>Welcome</h1>
    <h2>Please enter your access code</h2>

    <form accept-charset="UTF-8" action="" class="entry-form" method="POST">
        <div class="input-holder-popup enter-code clearfix">
            <div class="input-row clearfix">
                <label for="entryemail">Email: </label>
                <input class="field-input-container" id="entryemail" name="entryemail" type="email" dir="ltr" required value="<?php echo $email ?>"/>
            </div>
            <div class="input-row clearfix">
                <label for="entrycode">Code: </label>
                <input class="field-input-container" id="entrycode" name="entrycode" type="text" required  value="<?php echo $code ?>"/>
            </div>
            <div class="input-row clear remember-input">
                <input type="checkbox" id="remember" name="remember" value="1" <?php if( $remember ) : ?> checked="checked"<?php endif ?>/> <label for="remember">Remember me</label>
            </div>
        </div>

        <div class="buttons send-button">
            <input type="submit" name="user-auth" value="Enter" id="user-auth" />
        </div>
    </form>

    <div class="send-info">
        <?php if( $error ) : ?><div class="error-message"><?php echo $error ?></div><?php endif ?>
        <a href="#" class="register-link">No code? Click here</a>
    </div>

</div>

popup.php:

<?php
if(is_page('282')){
    return;
}else {
    if( user_auth_popup_hide() ) {
        return;
    }
}
?>
<div id="light" class="white_content">
    <?php get_template_part( 'blocks/popup/login' ) ?>
    <?php get_template_part( 'blocks/popup/register' ) ?>
</div>
<div id="fade" class="black_overlay"></div>



function user_auth_popup_hide()
{
    $localpopup = isset( $GLOBALS['localpopup'] ) && ( $GLOBALS['localpopup'] === true );
    $cookie = isset( $_COOKIE['website_login'] );
    $special_page = in_array( get_the_ID(), array(
        169,
        172,
    ) );

    return $localpopup || $cookie || $special_page;
}

1 个答案:

答案 0 :(得分:0)

已解决: 这不是代码问题,而是安装了阻止身份验证Cookie的缓存的问题。

代码中的小错误。...而不是使用

$ url = parse_url(site_url());         $ path = isset($ url ['path'])吗? $ url ['path']:'';

需要将cookie设置为  setcookie('website_login',$ md5,$ time,'/','websitedomainname.com');

我之前曾尝试使用'/'作为路径,但它不起作用,因此在这种情况下,网站域名至关重要。