ThinkpHP 5.1 폼 토 큰 실효 문제 해결
4830 단어 thinkphp5.1영패token
ThinkpHP 는 안전 을 고려 하여 폼 토 큰 을 추 가 했 습 니 다.Ajax 비동기 업데이트 데 이 터 를 통 해 일부 페이지 에서 데 이 터 를 새로 고침 하기 때문에 토 큰 이 업데이트 되 지 못 하고 이 어 두 번 째 로 데 이 터 를 새로 만 들 거나 업데이트 하 는 데 실 패 했 습 니 다.토 큰 의 검증 을 통과 할 수 없습니다.
물론 가장 쉬 운 방법 은 전체 페이지 를 새로 고침 하 는 것 입 니 다.이 로 인해 비동기 새로 고침 의 무의미 함 을 초래 합 니 다!인터넷 에서 많은 방법 을 찾 았 는데 여러 가지 방법 이 있다.보고 나 니 가장 좋 은 것 이 하나 있다.
Ajax 비동기 동적 으로 새 토 큰 을 만 들 고 로 컬 로 업데이트 할 것 을 요청 합 니 다.
주요 사고:매번 폼 을 보 내 는 것 이 끝 난 후에(성공 여부 와 상 관 없 이)Ajax 비동기 로 새로운 폼 토 큰 을 요청 하고 폼 숨 김 영역 에 저장 합 니 다.다음 에 폼 을 제출 하면 새로운 폼 토 큰 을 사용 하여 통과 합 니 다.
최종 효 과 는 다음 과 같다.
V2.5.0.png
주로 세 단계 로 나 뉜 다.
첫 번 째 단계:Index 컨트롤 러 에서 Token 을 만 드 는 방법
Index 컨트롤 러 에서 만 드 는 것 을 선택 한 이 유 는 전체 admin(배경)에서 이 방법 을 편리 하 게 참조 할 수 있 는 것 을 고려 합 니 다.매번 컨트롤 러 에 따라 해당 하 는 방법 을 찾 을 필요 가 없습니다.즉,이 방법 은 다른 컨트롤 러 들 이 모두 인용 할 수 있다 는 것 이다!
<?php
namespace app\admin\controller;
use think\Controller;
class Index extends Valid {
// token
public function getToken() {
$request = \think\facade\Request::instance();
echo $request->token();
}
}
두 번 째 단계:Javascript 에서 Ajax 를 만 들 고 새 토 큰 가 져 오기배경 에 새 토 큰 을 만 드 는 주소 가 고정 되 어 있 습 니 다.즉,:
/admin/Index/,따라서 jQuery 의 Get 방법 을 통 해 이 영 패 를 쉽게 얻 을 수 있 습 니 다!
// Token
function getNewToken() {
$.get("/admin/Index/getToken", function(data) {
document.getElementById("__token__").value = data;
});
}
세 번 째 단계:Html 페이지 에 숨 김 영역 저장 토 큰 만 들 기사실 ThinkpHP 의 폼 예제 코드 에는 이미 이 코드 가 있 습 니 다.페이지 를 처음 불 러 올 때 토 큰 은 페이지 에 따라 분 배 됩 니 다.뒤의 토 큰 은 Ajax 를 통 해 가 져 옵 니 다!
<!-- -->
<input type="hidden" id="__token__" name="__token__" value="{$Request.token}" />
마지막 으로,우 리 는 자바 script 에 해당 하 는 양식 을 제출 하 는 곳 에 문 구 를 추가 하여 새 토 큰 을 신청 할 수 있 습 니 다!예 를 들 어 아래 의 예제 코드 는 제출 후 성공 여부 와 상 관 없 이 새로운 토 큰 을 신청 했다.
/**
* Ajax
* @Author DuDongHua
* @DateTime 2018-04-28T21:21:23+0800
* @param { } Button
* @param { } Modal
* @param { } Controller
* @param { } Action
* @param { } Location Ajax id
* : , <a> onclick
* :
* 1. javascript Thinkphp5 URL , "{:url('" + Modal + "/" + Controller + "/" + Page + "')}
* , :var MeURL = '/'+Modal+'/'+Controller+'/'+Page;
*/
function EditData(Button,Modal,Controller,Action,Location,Page){
//
var Modal = arguments[1] ? arguments[1] : "admin"; //
var Controller = arguments[2] ? arguments[2] : "index"; //
var Action = arguments[3] ? arguments[3] : "editData"; //
var Location = arguments[4] ? arguments[4] : "content"; // Ajax id
var Page = arguments[5] ? arguments[5] : "index"; // Ajax
// url
var MeURL = '/'+Modal+'/'+Controller+'/'+Page;
setLoaderIn(true); //
//
$.ajax({
url: '/'+Modal+'/'+Controller+'/'+Action,
type: 'POST',
data: $(Button).closest("form").serialize(), //
dataType: 'json',
success: function(data){
//
// window.location.reload(); // ajax
loadAjaxHTML(MeURL,Location);
showMsg(data.msg);
setLoaderIn(false); //
getNewToken(); // Token
},
error:function(XMLHttpRequest, textStatus, errorThrown){
showMsg(XMLHttpRequest.status+" "+XMLHttpRequest.readyState,textStatus,"red","#f60");
getNewToken(); // Token
}
});
}
총결산이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thinkpphp 5.1 프레임 워 크 가 져 오기/엑셀 파일 내 보 내기 작업 예제이 사례 는 thinkpp 5.1 프레임 워 크 가 져 오기/엑셀 파일 내 보 내기 작업 을 설명 합 니 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다. thinkpop ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.