[SESSION]數據庫存儲session,大家提提意見
CREATETABLE`seauser_sessions`( `session_id`char(32)NOTNULLdefault'', `session_user_id`mediumint(8)NOTNULLdefault'0', `session_start`int(11)NOTNULLdefault'0', `session_time`int(11)NOTNULLdefault'0', PRIMARYKEY(`session_id`), KEY`session_use
CREATE TABLE `seauser_sessions` (
`session_id` char(32) NOT NULL default '',
`session_user_id` mediumint(8) NOT NULL default '0',
`session_start` int(11) NOT NULL default '0',
`session_time` int(11) NOT NULL default '0',
PRIMARY KEY (`session_id`),
KEY `session_user_id` (`session_user_id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1
<?php
/**
文件名: sessions.php
功能: 會話功能
作者: 韓三普
日期: 2005-8-1 to 2005-8-1
版權: (C) 2005 HanSanpu
支持: sanpu@eyou.com
*/
$session_life = get_cfg_var("session.gc_maxlifetime");
$sess_read = '';
function sess_open()
{
sess_gc(0);
return true;
}
function sess_close()
{
global $db;
$db->sql_close;
return true;
}
function sess_read($session_id)
{
global $db, $sess_read;
$sql = 'SELECT * FROM ' . SESSIONS_TABLE . "WHERE `session_id` = . '$session_id'";
$result = $db->sql_query($sql);
if ($result && $db->sql_numrows($result))
{
$sess_read = $db->sql_fetchrow($result);
return $sess_read;
}
else
{
return '';
}
}
function sess_write($session_id)
{
global $db, $session_life, $sess_read;
$expiry = time() + $session_life;
if ( !$sess_read )
{
$sql_insert = "INSERT INTO " . SESSIONS_TABLE . " (`session_id`, `session_user_id`, `session_start`, `session_time`) VALUES('$session_id','$user_id','".time()."','$expiry')";
$result = $db->sql_query($sql_insert);
return true;
}
else
{
$sql_update = "UPDATE " . SESSIONS_TABLE . " SET `session_time` = '$expiry' WHERE `session_id` = '$session_id'";
$result = $db->sql_query($sql_update);
}
}
function sess_destroy($session_id)
{
global $db;
$sql = "DELETE FROM " . SESSIONS_TABLE . " WHERE `seesion_id` = '$session_id'";
$result = $db->sql_query($sql);
}
function sess_gc($session_life)
{
global $db;
$sql = "DELETE FROM " . SESSIONS_TABLE . " WHERE `session_time` < " . time() . "";
$result = $db->sql_query($sql);
return $db->sql_affectedrows();
}
session_set_save_handler('sess_open','sess_close','sess_read','sess_write','sess_destroy','sess_gc');
@session_start();
?>
北京野狼 回復于:2005-08-02 11:01:56
|
效率低,維護麻煩。
|
韓三普 回復于:2005-08-02 11:09:46
|
剛剛學PHP,呵呵,弄出來這個不成熟的東西,怎么能做的效率高一點呢^^
能否針對代碼稍加評述?
|
北京野狼 回復于:2005-08-02 11:12:02
|
我的意思是完全沒有必要使用數據庫代替文件
|
北京野狼 回復于:2005-08-02 11:13:39
|
http://bbs.chinaunix.net/forum/viewtopic.php?t=581113
|
韓三普 回復于:2005-08-02 11:14:31
|
如果用文件系統,當用戶多到一定程度,讀取會比數據庫慢好多呀。數據庫本身就是為了優化查詢設計的吧。
|
北京野狼 回復于:2005-08-02 11:19:23
|
數據庫永遠比文件慢
|
hitty 回復于:2005-08-02 11:46:07
|
可以參考phpbb的SESSION做法....
|
韓三普 回復于:2005-08-02 12:04:01
|
很厲害,一時不能完全吸收,所以做出來這個純SESSION的來玩,BB好像是優先COOKIE的,并且很智能,復雜了,寫法也不傳統,不適合初學者吧,改日再研究,我先這個只是想先多多理解SESSION,下一步也會向BB靠攏。
有人能說說上面這段代碼哪些比較垃圾嗎?
|
clampox 回復于:2005-08-04 11:49:15
|
寫得可以,比我初學PHP時強多了
可以優化一下,因為大多數時候是在UPDATE,新建SESSION時才INSERT,所以可以變下順序,
session_write的時候,可以先UPDATE,用mysql_info函數取信息,根據信息來判斷是否INSERT,往往可以少跑一次數據庫來回。
|
韓三普 回復于:2005-08-04 16:23:13
|
謝謝clampox的指點^^
|
hitty 回復于:2005-08-05 09:43:33
|
可以只用insert和delete就可以了...這樣可能最快
|
wangyih 回復于:2005-08-05 19:42:42
|
樓主可別聽上面兩位亂說。
|
Max.H 回復于:2005-08-06 18:15:30
|
不明白這樣存有什么用?
一般存到數據庫是為了多臺服務器共享SESSION吧?
|
jiangsu3000 回復于:2005-08-15 16:21:35
|
其實用文件做,你就可以針對你的數據結構設計好的查詢算法,所以會相對你的應用會比只要查詢就用"selecet"修改就用"update"會高效點...
|
戀太后天 回復于:2005-08-16 10:47:14
|
與文本相比的效率如何可以實際測試一次
用數據庫存的最大意義在于多服務器共享
雖然故意弄成那樣也并非最好的做法來的
但畢竟它實現了
|
redor 回復于:2005-08-16 20:43:51
|
你有100w用戶的時候。。。。。你的mysql數據庫能撐多長時間?技術是可以實現,但是用起來。。。。
|
韓三普 回復于:2005-08-16 21:27:52
|
可以采用數據庫分布的方式,自動平衡就行了?,F在我和你們討論這個還有點早,呵呵 。
不過說到這里,把大致思路給大家介紹一下。
一臺主mysql服務器,做主要存儲用,所以存儲的數據都先存這上面,由它分發給其它用來平衡的N臺服務器上,session的應用應該是讀遠遠大于寫吧,所以,每當網站服務器Apache等請求查詢的話,可以把查詢請求動態的分到用來平衡的N臺服務器上。這樣,就是1000w人,可能壓力也不是特別的大吧。當然,如果有更高的要求,還會有其它配置的方法,“數據庫”只所以叫“數據庫”,做為存儲就有文件系統比不了的優勢。
個人一點小看法,大家接著討論。初識PHP,已經迷上了。接著學基本功去了^^BYE!
BY 韓三普
|
jzz_zh 回復于:2005-08-17 00:58:38
|
[quote:6ce4d882f3="韓三普"]如果用文件系統,當用戶多到一定程度,讀取會比數據庫慢好多呀。數據庫本身就是為了優化查詢設計的吧。[/quote:6ce4d882f3]
使用mysql的內存表吧
mysql4.1以后,內存表 比以前好很多了
|
原文轉自:http://www.anti-gravitydesign.com
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|