1

意見:

<?php
    $modelLogin = new \app\models\LoginForm();
?>
<div class="auth_box">
    <?php $form = ActiveForm::begin([
        'id' => 'login-form',
        'action' => ['site/login'],
        'enableClientValidation' => false,
        'enableAjaxValidation' => true,
        //'options' => ['class' => 'form-horizontal'],
        'fieldConfig' => [
            'template' => "{input}\n<div class=\"form_error\">{error}</div>"
        ]
    ]); ?>

    <?= $form->field($modelLogin, 'username')->textInput(['placeholder' => 'Login']) ?>

    <?= $form->field($modelLogin, 'password')->passwordInput(['placeholder' => 'Password']) ?>

    <?= $form->field($modelLogin, 'rememberMe', [
        'template' => "{input}",
    ])->checkbox() ?>

    <?= Html::submitInput('Enter') ?>

    <?php ActiveForm::end(); ?>

    <a href="#" id="restore_password">I don't remember my password</a>
</div>

コントローラ:

public function actionLogin()
{
    if (!\Yii::$app->user->isGuest) {
        return $this->goHome();
    }

    $modelLogin = new LoginForm();

    if (Yii::$app->request->isAjax) {
        $modelLogin->load(Yii::$app->request->post());
        Yii::$app->response->format = Response::FORMAT_JSON;
        return ActiveForm::validate($modelLogin);
    } elseif ($modelLogin->load(Yii::$app->request->post()) && $modelLogin->login()) {
        return $this->goBack();
    }
}

モデル、メソッド ログイン:

public function login()
{
    if ($this->validate()) {
        return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 365 : 0);
    } else {
        return false;
    }
}

「remember me」をチェックすると、Cookie は次のようになります。

ここに画像の説明を入力

_identityパラメータがあります。

「remember me」をチェックしないと、Cookie は次のようになります。

ここに画像の説明を入力

_identityパラメータはありません。

どちらの場合も、ブラウザを再度開いた後は常に承認されています。

4

1 に答える 1

0

PHP のセッション タイムアウトを 1 分以下に変更できます。
自動ログインを有効にします。各自動ログインafterLoginを変更するUser クラスのオーバーライド関数で。AuthKey

于 2015-07-06T03:56:58.813 に答える