PHP令牌 Token改進版
正是由於使用了 base64 ,所以在把這個令牌透過 GET方法發送的時候,出現了問題。
例如:http://test/test.php?a=1+2
你用 $_GET["a"] 取得是:1 2 ,也就是那個加號沒有了。一開始我用 urlencode 來轉換,但總有那麼一兩的結果是意料外的。
後來想想base64 的字符就限定於: [A-Za-z0-9+/=] 這麼多,加號出問題,我就把加號換成不出問題的符號,下劃線是最好的選擇。以下是修改後的程式碼:
GEncrypt.inc.php
程式碼如下:
class GEncrypt {
protected stat fphp
class GEncrypt {
protected stat fphp
class GEncrypt {
protected stat f encrypt_key );
$ctr = 0;
$tmp = "";
for($i = 0; $i if ($ctr == strlenkey $encrypt_key ))
$ctr = 0;
$tmp .= substr ( $txt, $i, 1 ) ^ substr ( $encrypt_key, $ctr, 1 );
$ctr ++;
}
public static function encrypt($txt, $key) {
$encrypt_key = md5 ( (( float ) date ( "YmdHis" ) + rand ( 10000000000000000, 99999999999999999 )) . rand ( 100000, 999999 ) );
$ctr = 0;
$tmp = "";
for($i = 0; $i if ($ctr == strlen ( $encrypt_key ))
$ctr = strlen ( $encrypt_key ))
$ctr = 0;
$tmp .= substr ( $encrypt_key, $ctr, 1 ) . (substr ( $txt, $i, 1 ) ^ substr ( $encrypt_key, $ctr, 1 ));
$ctr ++;
return ( preg_replace("/\+/s","_", base64_encode ( self::keyED ( $tmp, $key ) ) ));
}
//base64 [A-Za-z0-9+/ =]
public static function decrypt($txt, $key) {
if($txt == ""){ return false;}
//echo preg_replace("/_/s","+",$txt) ;
$txt = self::keyED (base64_decode ( preg_replace("/_/s","+", $txt) ), $key );
$tmp = "";
for($i = 0; $ i $md5 = substr ( $txt, $i, 1 );
$i ++;
$tmp .= (substr ( $txt, $i, 1 ) ^ $md5);
}
return $tmp;
}
}
?>
GToken.inc.php
/**
* 原理:請求分配token的時候,想辦法分配一個唯一的token, base64( time + rand + action)
* 如果提交,將這個token記錄,說明這個token以經使用,可以跟隨它來避免重複提交。
*
*/
class GToken {
/**
* 得到目前所有的token
*
* @return array
*/
公共靜態函數getTokens(){
$tokens = $_SESSION[Son_SESSS; if (empty($tokens) && !is_array($tokens)) {
$tokens = array();
}
回傳$代幣;
}
/**&f&f&ff; ($formName,$key = GConfig::ENCRYPT_KEY ){
$token = GEncrypt::encrypt($formName.session_id(),$key) ;
回傳$token;
}#o
返回$token;
}#
*&o*&*
公用靜態函數dropToken($token){
$tokens = self::getTokens();
$tokens[] = $token;
GSession::set(GConfig::SESSION_KEY_TOKEN ,$tokens); **
* 產生一個新的Token
*
* @param string $formName
* @param 加密金鑰 $key
* @return string
*/
公共靜態函數isToken($token,$formName,$fromCheck = false,$key = GConfig::ENCRYPT_KEY){
if(empty($token)) return false ;
= self::getTokens();
if (in_array($token,$tokens)) //如果存在,表示可以使用過的token
return false;
$source = GEncrypt::decrypt($token,$ key);
if($fromCheck)
return $source == $formName.session_id();
else{
return strpos($source,$formName) === 0;
}
getTokenKey($token,$key = GConfig::ENCRYPT_KEY){
if($token == null || trim($token) == "") return false;
$source = GEncrypt::decrypt($token,$ key);
回傳$source != "" ? str_replace(session_id(),"",$source) : false;
}
public function newTokenForSmart );
回self::newToken($form);
}
}
? >
以上就是PHP token Token改進版的程式碼實例,希望對大家有幫助,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

登入token無效的解決辦法有檢查Token是否過期、檢查Token是否正確、檢查Token是否被篡改、檢查Token是否與使用者匹配、清除快取或Cookie、檢查網路連線和伺服器狀態、重新登入或請求新的Token、聯絡技術支援或開發人員等。詳細介紹:1、檢查Token是否過期,登入Token通常會設定有效期,一旦超過有效期,就會被認為無效等等。

登入token無效問題可以透過檢查網路連線、檢查token有效期、清除快取和Cookie、檢查登入狀態、聯絡應用程式開發者和加強帳號安全來解決。詳細介紹:1、檢查網路連接,重新連接網路或更換網路環境;2、檢查token有效期,重新取得一個新的token,或聯絡應用程式的開發者;3、清除快取和Cookie,清除瀏覽器快取和Cookie,然後重新登入應用程式;4、檢查登入狀態。

PHP中的安全JWT令牌產生與驗證技術解析隨著網路應用的發展,使用者身份驗證與授權變得越來越重要。 JsonWebToken(JWT)是一種用於在網路應用中安全傳輸資訊的開放標準(RFC7519)。在PHP開發中,使用JWT令牌來實現使用者身份驗證和授權已成為一種常見的做法。本文將介紹PHP中的安全JWT令牌產生與驗證技術。一、JWT基礎知識在了解如何生成與

Redis儲存使用者token在設計類似電商的系統時,一個常見的需求是每個頁面都需要攜帶登入使用者資訊。常見的解決方法有兩種:使用cookie保存使用JWT保存但如果系統中使用了Redis緩存,那麼還可以有第三種解決方案–將用戶token緩存在Redis中。登陸時產生一個token存入Redis//產生一個token物件,保存在redis中redisTemplate.opsForHash().put("token","user",user)

如何解決C++語法錯誤:'expectedprimary-expressionbefore':'token'?在C++程式設計中,語法錯誤是常見的問題。其中一個常見的錯誤是出現了"expectedprimary-expressionbefore':'token"的錯誤提示。這個錯誤通常在使用條件式和三元運算子時出現。本文將介紹這個錯誤的原

一、token登入鑑權jwt:JSONWebToken。是一種認證協議,一般用來校驗請求的身份資訊和身分權限。由三個部分組成:Header、Hayload、Signatureheader:也就是頭部訊息,是描述這個token的基本訊息,json格式{"alg":"HS256",//表示簽名的演算法,預設是HMACSHA256(寫成HS256) "type":"JWT"//表示Token的類型,JWT令牌統一寫為JWT}pa

沒想到時至今日,ChatGPT竟然會犯下低階錯誤?吳恩達大神最新開課就指出來了:ChatGPT不會反轉單字!例如讓它反轉下lollipop這個詞,輸出是pilollol,完全混亂。喔豁,這確實有點大跌眼鏡。以至於聽課網友在Reddit上發文後,立刻引來大量圍觀,貼文熱度火速衝到6k。而且這不是偶然bug,網友們發現ChatGPT確實無法完成這個任務,我們親測結果也是如此。 △實測ChatGPT(GPT-3.5)甚至包括Bard、Bing、文心一言在內等一眾產品都不行。 △實測Bard△實測文心一言

token是一種虛擬貨幣,它是一種用來表示使用者權限、記錄交易資訊、支付虛擬貨幣的數位貨幣。 token可以用來在特定的網路上進行交易,它可以用來購買或出售特定的虛擬貨幣,也可以用來支付特定的服務費用。
