yii2在访问网页之前创建密码

时间:2016-11-19 02:52:18

标签: javascript php yii2

我需要弹出一个模态来询问密码。我做了以下但它总是将我重定向到登录页面。而且似乎根本没有创建会话。

main.php(布局)

<div class="modal fade" id="mymodal" role="dialog">
    <div class="modal-dialog">
        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title"><span class="glyphicon glyphicon-lock"></span>PASSCODE</h4>
            </div>
            <form role="form" id="myform" action="site/passcode">
                <div class="modal-body">
                  <div class="form-group">
                      <!--<label for="psw"><span class="glyphicon glyphicon-eye-open"></span> Enter Passcode</label>-->
                      <input type="text" class="form-control" id="passcode" placeholder="Enter Passcode">
                  </div>
              </div>
              <div class="modal-footer">
                <button id="passcodeBtn" class="btn btn-success btn-block" onClick="btn_click()">Submit</button>
            </div>
        </form>
    </div>

</div>

<?php
    if(!isset($_SESSION)) 
    { 
        session_start(); 
    } 
        //$_SESSION["user"] = "permit";
    if(!isset($_SESSION["user"])) {
            echo "<script type='text/javascript'>
            $('#passcodeModal').modal({
                backdrop: 'static',
                keyboard: false
            })
    $(document).ready(function(){
        $('#passcodeModal').modal('show');
    });
    </script>";
    }
?>
<script>

    function validatePasscode_click()
    {
      var pc = document.getElementById('passcode').value
      //document.getElementById("passcodeform").submit();
      //
      console.log("inside click");
      $.ajax({
        type: "POST",
        url: '/site/passcode',
        data: {name: pc, _csrf: yii.getCsrfToken()},
        //dataType: "json",
        success: function(response){
            console.log("ajax");
          var resp = response;
          var answer = jQuery.parseJSON(response);
          console.log(answer);
          if(answer == '123'){
            $('#passcodeModal').modal('hide');
        }
    }});
      return false;
    }
</script>

我验证了

CONTROLLER

public function actionPasscode() {
    // a list of available cities
    if(Yii::$app->request->isAjax)  {
        $data = Yii::$app->request->post();
        $passcode = $data['name'];
        $_SESSION["user"] = "permit";
        if($passcode == '123'){
            if(!isset($_SESSION)) 
            { 
                session_start(); 
            } 
            $_SESSION["user"] = "permit";
        }
        return json_encode($passcode);
    }
}

我需要使用ajax验证密码,然后为每个其他页面设置会话,如果您之前已输入,则不会再次要求输入密码

1 个答案:

答案 0 :(得分:0)

您的会话未创建,因为在Yii2中,您创建的会话与您在代码中显示的内容不同。 Yii2使用yii\web\User类进行身份验证和会话存储。

基本上,你应该使用类似的东西:

Yii::$app->user->login($this->getUser(), 3600 * 24 * 30);

$this->getUser()返回的位置:

static::findOne(['email' => $email]);

这是从基本模板进行的一点修改,以及Yii2存储用户会话的确切方式。您自己创建的会话可能(可能是)与Yii2的会话管理冲突。

请尝试使用此方法。