2016-11-19 20 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> 

私はAJAXを使用してパスコードを検証する必要

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); 
    } 
} 

は、セッションを設定する検証そう前夜あなたが前に入力した場合はパスコードをもう一度尋ねません

答えて

1

あなたのセッションでは、あなたのコードに表示されているものとは異なるセッションを作成するため、セッションは作成されません。 Yii2は、認証とセッションの保存にyii\web\Userクラスを使用します。

基本的に、あなたのようなもの使用する必要があります:

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

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

はこれが成立し、少し基本テンプレートから変更され、それが正確にどのようにYii2だがユーザーセッションを格納します。独自に作成されたセッションは、Yii2のセッション管理と競合する可能性があります。

この方法をお試しください。

関連する問題