我需要弹出一个模态来询问密码。我做了以下但它总是将我重定向到登录页面。而且似乎根本没有创建会话。
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验证密码,然后为每个其他页面设置会话,如果您之前已输入,则不会再次要求输入密码
答案 0 :(得分:0)
您的会话未创建,因为在Yii2中,您创建的会话与您在代码中显示的内容不同。 Yii2使用yii\web\User类进行身份验证和会话存储。
基本上,你应该使用类似的东西:
Yii::$app->user->login($this->getUser(), 3600 * 24 * 30);
$this->getUser()
返回的位置:
static::findOne(['email' => $email]);
这是从基本模板进行的一点修改,以及Yii2存储用户会话的确切方式。您自己创建的会话可能(可能是)与Yii2的会话管理冲突。
请尝试使用此方法。