2012-09-25 57 views
0

我有一個很奇怪的問題。我在Yii有一個登錄表單,工作正常。網站移動到另一臺服務器後,我得到Yii - 錯誤400 CSRF令牌無法驗證

錯誤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, 

,如果你需要看到的例子。 Here是一個正在工作,並且here是與問題的一個

+0

也許您的['cookieParams'](http://www.yiiframework.com/doc/api/1.1/CHttpSession#setCookieParams-detail)在新部署的上下文中無效? – Jon

+0

你能解釋一下你的意思嗎? –

回答

1

我打開第一個示例,並在源代碼中找到此html,這是正確的。

<input type="hidden" value="df5a0fc9ab86f85cdcdabe6b2ee62e85d3ac0323" 
     name="YII_CSRF_TOKEN" /> 

在第二個示例頁面上,我還沒有找到任何html代碼,如上所示。這意味着在第二個示例中,enableCsrf驗證設置爲false

嘗試在此頁面(或在config/main.php中)中調試$ _POST ['dontvalidate']。

+0

我不知道爲什麼,因爲它是我上傳到其他服務器的相同代碼。無論如何,在config/main.php中,我將enableCsrfValidation設置爲false,因此完全禁用了它,現在它可以工作。但這不是我猜的最好方法! –

相關問題