[英]Kohana 3.2 AJAX form token keeps chaning
我想以我的ajax形式使用令牌。 該表單是從一個生成唯一令牌的ajax控制器加載的。 然后,該窗體過帳到同一控制器。
但我做對了! 加載表單然后發布時,會話為空或創建了新令牌! 我猜這是因為表單和令牌是在進行ajax調用時創建的。
這是我所做的:
我將創建令牌功能放置在ajax控制器中的before()處,每次ajax加載頁面時,它都會創建一個新令牌,該令牌永遠不會生效,因為它總是在變化。
因此,然后我將令牌功能移到了主控制器上,並在其中創建了令牌,ajax控制器沒有擴展主控制器,它是獨立的。 因為我認為現在ajax調用不會加載令牌功能。 相反,ajax控制器將只獲取在main處創建的令牌。 但是......它是空的
我嘗試了Session :: instance()-> get('securitytoken')應該可以訪問應用程序中的所有會話嗎?
有誰知道我該怎么做? 還是為什么我無法訪問在另一個控制器中創建的會話?
該測試功能通過ajax獲取令牌
class Controller_Ajax extends Controller_Temp{
public function action_test(){
$user2 = Session::instance()->get('securitytoken');
echo $user2; }
}
在我的主控制器中:
$token = md5(uniqid(microtime(), true));
Session::instance()->set('securitytoken', $token);
謝謝
在您的視圖內:
<?php echo Form::hidden('csrf', Security::token()) ?>
現在,在您的控制器內部,通過驗證庫進行檢查:
<?php
$post = Validation::factory($_POST)
->rule('name', 'not_empty')
->rule('email', 'not_empty')
->rule('email', 'email')
->rule('csrf', 'not_empty')
->rule('csrf', 'Security::check')
;
if($post->check()) { ... }
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.