在我的PHP
項目中,我創建了一個管理我的訪問令牌的singletone類。
令牌是一些恆定的字符串,時間戳爲+/- 5分鐘,與SHA1
散列。
我希望每個頁面都可以訪問這個singletone實例(同一個實例),因爲它擁有這些標記。在這種情況下也會有一個刷新令牌的過程。
名稱TokenManager
位於不同的php文件中。
我在不同的文件中創建實例$TOKENS
。PHP - singletone全局實例
<?php
require_once 'TokenManager.php';
$TOKENS = TokenManager::Instance();
而對於刷新動作(refreshTokens.php)其他文件:
<?php
require_once 'Tokens.php';
global $TOKENS;
$TOKENS->refreshTokens();
var_dump($TOKENS->tokens);
在另一頁是一個Web服務(AddUser)
我用這個Tokens.php
實例作爲全球。
require_once 'TokenManager.php';
require_once 'Tokens.php';
...................................
function start(){
global $userParams;
global $TOKENS;
//Check for all mandatory params
if(!ValidateParams()){
finish();
}
if(!$TOKENS->checkTokenAndGetChannel($userParams[PARAM_TOKEN])){
setError(ERR6_BAD_TOKEN, CODE6_DESC);
finish();
}
if(!isEmailValidByDrupal($userParams[PARAM_EMAIL])){
setError(ERR3_BAD_EMAIL, CODE3_DESC . $userParams[PARAM_EMAIL]);
finish();
}
finish();
}
,每次我打電話refreshTokens.php
,並採取令牌我每次有新的實例與不同的價值觀是什麼讓每一次的令牌無效的問題。
我該怎麼辦?
如果我把它保存在Session是它會針對不同的用戶保存實例? – NickF
如果保存在會話中,爲什麼它對於不同的用戶應該是相同的?每個用戶都有自己獨特的會話! –
沒有馬克所說,這將是很好的唯一的問題是你保存它是多餘的,你應該考慮如果你真的希望我認爲數據庫表是更好的選擇。這對未來也很靈活,如果你想改變你的令牌或任何下一個... – Steini