我想從頭開始創建一個會話處理器。我不想用session_set_save_handler
。儘管我找不到任何東西,我只是不知道從哪裏開始。有人能指出我的方向是正確的嗎?還是解釋一下做這件事的最好方法?從頭開始處理會話
謝謝! :)
我想從頭開始創建一個會話處理器。我不想用session_set_save_handler
。儘管我找不到任何東西,我只是不知道從哪裏開始。有人能指出我的方向是正確的嗎?還是解釋一下做這件事的最好方法?從頭開始處理會話
謝謝! :)
有幾件事情試圖建立自己的會話機制時需要注意。
你可以做的第一件事就是編寫一個PHP會話包裝器。將包裝PHP會話功能的類。所以當你想使用會話時,你可以實例化你的會話類,並用會話做你想做的事情。你可以做這樣的事情:
class Session
{
/**
* Starts new or resumes existing session
*
* @access public
* @return bool
*/
public function start()
{
if(session_start()) {
return true;
}
return false;
}
/**
* End existing session, destroy, unset and delete session cookie
*
* @access public
* @return void
*/
public function end()
{
if($this->status != true) {
$this->start();
}
session_destroy();
session_unset();
setcookie(session_name(), null, 0, "/");
}
/**
* Set new session item
*
* @access public
* @param mixed
* @param mixed
* @return mixed
*/
public function set($key, $value)
{
return $_SESSION[$key] = $value;
}
/**
* Checks if session key is already set
*
* @access public
* @param mixed - session key
* @return bool
*/
public function has($key)
{
if(isset($_SESSION[$key])) {
return true;
}
return false;
}
/**
* Get session item
*
* @access public
* @param mixed
* @return mixed
*/
public function get($key)
{
if(!isset($_SESSION[$key])) {
return false;
}
return $_SESSION[$key];
}
}
然後你就可以使用這個會話類是這樣的:
$session = new Session();
$session->start();
$session->set('id', 5);
echo $session->get('id);
我喜歡這個,因爲我可以使用PHP的會話狀物品和沒有使用PHP功能。 但請注意,您無論如何都使用PHP函數,您在使用這個類時就不會看到它。這樣做可以幫助您深入瞭解PHP會話的工作方式。
如果您決定咬定子彈並編寫自己的會話機制,則有幾件事情需要注意。你需要決定的第一件事是你會在哪裏存儲會話信息? 您可以將它們保存在數據庫,文件系統,cookie等文件中...... 默認情況下,PHP將會話保存在文件系統上。編寫自己的會話機制的最簡單方法是將會話保存到cookie中。 Codeigniter默認使用Codeigniter會話。
你會寫你自己的對象,這將有方法讓你讀,寫,編輯,刪除...會議陣列。該數組必須在保存到cookie之前序列化。一旦會話被保存在cookie中,您可以使用您編寫的方法將它們取出,編輯或刪除它們等。這樣做時,請注意安全性,因爲用戶可以查看其Cookie。你將不得不隱藏會話值。
然後,如果您決定將會話保存到數據庫中,則可以使用您擁有的相同方法,但這次將會話保存到數據庫中而不是cookie中。
最好的方法是編寫會話接口,以便每個會話類都可以實現。這樣你可以使用你的Session類,並且不關心會話在哪裏存儲。
如果您不明白我現在在說什麼,那麼只需構建您自己的會話包裝器,這可以幫助您瞭解有關會話的更多信息。並給你用OOP處理會話的好方法。一旦你有了這些,你可以使用這個API來編寫你的會話接口,並在每個Session類中實現這個接口,並且編寫你自己的邏輯來保存會話數據的方式和位置。
還有一點,PHP Sessions機制沒有任何問題。
完全是我在找的!非常感謝! – user18933
我做什麼時調用會話的
//啓動會話並設置變種的
在session_start();
$ _SESSION ['login'] ='yes';
$ _SESSION ['someinfo'] = $ var;
//當致電
session_start();
$ var = $ _SESSION ['someinfo'];
我希望這有助於
-kris
這是基本的PHP。我不想使用程序會話,我想創建一個自定義處理程序。對困惑感到抱歉。 – user18933
如果您使用encrypted cookies,則不需要使用PHP的會話處理。基本上,標準會話將數據存儲在服務器上(memcache,文件或數據庫),並將數據的ID /密鑰放置在提供給用戶代理的cookie中。
加密的cookie只是將數據存儲在用戶代理的cookie中,並完全放棄該ID /密鑰。這可以減少服務器負載,因爲將存儲卸載給用戶。
如果數據的重要性不足以加密,您也可以只使用HMAC sign the cookie的內容,以防止人們看到原始內容而改變它。
你可能想試試我使用加密cookie的簡單PHP Kit庫。
$_SESSION = \Kit\Cookie::get('session');
...do stuff...
\Kit\Cookie::set('session', $_SESSION);
只要確保在發送任何輸出給用戶之前保存cookie,因爲所有標題都需要首先發送。
取決於你想要的會話 –
爲什麼不是session_set_save_handler? –
@Bondye你是什麼意思?用戶,我可以使用它,但我想進入更高級的編程。這只是實踐。 – user18933