我有一个非常奇怪的问题。我在Yii有一个登录表单,工作正常。将网站移动到另一台服务器后我得到了
错误400无法验证CSRF令牌
我不明白为什么它在开发服务器上运行而在新服务器上运行。这是我的代码:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
<div class="row">
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->error($model,'password'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php $this->endWidget(); ?>
这是配置文件中的csrf配置:
'enableCsrfValidation' => !isset($_POST['dontvalidate']) ? true : false,
答案 0 :(得分:1)
我打开了第一个例子,在源代码中找到了这个html,这是正确的。
<input type="hidden" value="df5a0fc9ab86f85cdcdabe6b2ee62e85d3ac0323"
name="YII_CSRF_TOKEN" />
在第二个示例页面上,我没有找到上面的任何HTML代码。这意味着在第二个示例中 enableCsrfValidation 设置为 false 。
尝试在此页面(或在config / main.php中)调试$ _POST ['dontvalidate']。