ورود

View Full Version : عدم سابمیت فرم وقتی که مدت طولانی پر کردن فرم طول می کشه



desatir7316
شنبه 19 اردیبهشت 1394, 08:55 صبح
سلام دوستان
وقتی یه فرم دارم و مدت زیادی هست که submit نکردم بعد از submit خطای زیر رو میده


Bad Request (#400)
قادر به تائید اطلاعات ارسالی شما نمی‌باشد.

The above error occurred while the Web server was processing your request.

Please contact us if you think this is a server error. Thank you.


چطوری می شه از این خطا جلوگیری کرد؟ راهی به جز غیر فعال کردم csrf validation هست؟

ممنون می شم راهنمایی کنید

MMSHFE
شنبه 19 اردیبهشت 1394, 09:28 صبح
فکر میکنم بتونید با AJAX توکن جدید رو از Yii در فواصل زمانی مشخص بگیرین و توی فرم قرار بدین. مثال:

public function actionNewToken()
{
if(!Yii::app()->request->isAjaxRequest) {
Yii::app()->end();
}
echo Yii::app()->request->csrfToken;
}
توی ویو (یا توی layout برای قرارگرفتن در همه ویوها) هم با کمک AJAX هر چند لحظه یکبار توکن رو از اکشن مربوطه بگیرین و عنصر مربوطه رو که با کلاس یا id توی فرم مشخص کردین یا با کمک سکلتوری مثل input[name=YII_CSRF_TOKEN] بهش دسترسی پیدا میکنید رو با مقدار دریافتی، بروزرسانی کنید.

desatir7316
سه شنبه 05 خرداد 1394, 07:18 صبح
از نظر کم شدن امنیت، این روش با اینکه کلا csrf رو غیرفعال کنیم فرقی داره؟

engmmrj
سه شنبه 05 خرداد 1394, 08:14 صبح
من تو layout همیشه یک متغیر تعیریف میکنم و token csrf رو میریزم توش و بعدش بصورت پارامتر ارسالش میکنم.

<script type="text/javascript">var YII_CSRF_TOKEN = "<?php echo Yii::app()->request->csrfToken?>"</script>

$.post('http://google.com',{name:"ali", YII_CSRF_TOKEN:YII_CSRF_TOKEN})