2016-11-19 32 views
0

我需要一个模态弹出来询问密码。我做了以下,但它总是将我重定向到登录页面。而且这个会议似乎根本没有创建。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

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

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

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

其中$this->getUser()回报:

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

这是拍摄,并一点点从基本模板修改,这也正是如何Yii2存储用户会话。您自己创建的会话可能(可能会)与Yii2的会话管理冲突。

请尝试使用此方法。